Nth natural number after removing all numbers consisting of the digit 9
Last Updated :
28 Nov, 2022
Given a positive integer N, the task is to find the Nth natural number after removing all the natural numbers containing digit 9.
Examples:
Input: N = 8
Output: 8
Explanation:
Since 9 is the first natural number that contains the digit 9 and is the 9th natural number, therefore, no removal required to find the 8th natural number, which is 8.
Input: N = 9
Output: 10
Explanation:
Removing number 9, the first 9 natural numbers are {1, 2, 3, 4, 5, 6, 7, 8, 10}.
Therefore, the 9th natural number is 10.
Naive Approach: The simplest approach to solve the above problem is to iterate up to N and keep excluding all numbers less than N containing the digit 9. Finally, print the Nth natural number obtained.
Follow below steps below to solve the problems :
- Initialize one variable count = 0
- and use for loop and pass the element of the loop to isDigitNine(i) function to check whether that number contains 9 or not and increment that if not present
- And once count hits N assign the last i to count and break the loop.
- Return answer as count
C++
#include <bits/stdc++.h>
using namespace std;
bool isDigitNine( int i)
{
while (i > 0) {
int rem = i % 10;
if (rem == 9) {
return true ;
}
i = i / 10;
}
return false ;
}
long long findNth( long long N)
{
long long count = 0;
for ( int i = 1; i > 0; i++) {
if (isDigitNine(i) == false ) {
count++;
if (count == N) {
count = i;
break ;
}
}
}
return count;
}
int main()
{
long long N = 18976;
long long ans = findNth(N);
cout << ans << endl;
return 0;
}
|
Java
public class nthnaturalNum {
public static void main(String[] args) {
long N = 18976 ;
long ans = findNth(N);
System.out.println(ans);
}
static long findNth( long N)
{
long count = 0 ;
for ( int i = 1 ; i > 0 ; i++ ){
if (isDigitNine(i) == false )
{
count ++;
if (count == N ) {
count = i;
break ;
}
}
}
return count ;
}
static boolean isDigitNine( int i){
while (i > 0 ){
int rem = i % 10 ;
if (rem == 9 ){
return true ;
}
i = i / 10 ;
}
return false ;
}
}
|
Python3
def findNth(N):
count = 0
i = 1
while (i ! = 0 ):
if (isDigitNine(i) = = False ):
count = count + 1
if (count = = N):
count = i
break
i = i + 1
return count
def isDigitNine(i):
while (i ! = 0 ):
rem = i % 10
if (rem = = 9 ):
return True
i = i / / 10
return False
N = 18976
solution = findNth(N)
print (solution)
|
C#
using System;
public class gfg {
static bool isDigitNine( int i)
{
while (i > 0) {
int rem = i % 10;
if (rem == 9) {
return true ;
}
i = i / 10;
}
return false ;
}
static long findNth( long N)
{
long count = 0;
for ( int i = 1; i > 0; i++)
{
if (isDigitNine(i) == false ) {
count++;
if (count == N) {
count = i;
break ;
}
}
}
return count;
}
public static void Main( string [] args)
{
long N = 18976;
long ans = findNth(N);
Console.WriteLine(ans);
}
}
|
Javascript
function isDigitNine(i)
{
while (i > 0) {
let rem = i % 10;
if (rem == 9) {
return true ;
}
i =Math.floor( i / 10);
}
return false ;
}
function findNth(N)
{
let count = 0;
for (let i = 1; i > 0; i++) {
if (isDigitNine(i) == false ) {
count++;
if (count == N) {
count = i;
break ;
}
}
}
return count;
}
let N = 18976;
let ans = findNth(N);
console.log(ans);
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Efficient Approach: The above approach can be optimized based on the following observations:
- It is known that, digits of base 2 numbers varies from 0 to 1. Similarly, digits of base 10 numbers varies from 0 to 9.
- Therefore, the digits of base 9 numbers will vary from 0 to 8.
- It can be observed that Nth number in base 9 is equal to Nth number after skipping numbers containing digit 9.
- So the task is reduced to find the base 9 equivalent of the number N.
Follow the steps below to solve the problem:
- Initialize two variables, say res = 0 and p = 1, to store the number in base 9 and to store the position of a digit.
- Iterate while N is greater than 0 and perform the following operations:
- Update res as res = res + p*(N%9).
- Divide N by 9 and multiply p by 10.
- After completing the above steps, print the value of res.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
long long findNthNumber( long long N)
{
long long result = 0;
long long p = 1;
while (N > 0) {
result += (p * (N % 9));
N = N / 9;
p = p * 10;
}
return result;
}
int main()
{
int N = 9;
cout << findNthNumber(N);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static long findNthNumber( long N)
{
long result = 0 ;
long p = 1 ;
while (N > 0 ) {
result += (p * (N % 9 ));
N = N / 9 ;
p = p * 10 ;
}
return result;
}
public static void main(String[] args)
{
int N = 9 ;
System.out.print(findNthNumber(N));
}
}
|
Python3
def findNthNumber(N):
result = 0
p = 1
while (N > 0 ):
result + = (p * (N % 9 ))
N = N / / 9
p = p * 10
return result
if __name__ = = '__main__' :
N = 9
print (findNthNumber(N))
|
C#
using System;
class GFG
{
static long findNthNumber( long N)
{
long result = 0;
long p = 1;
while (N > 0) {
result += (p * (N % 9));
N = N / 9;
p = p * 10;
}
return result;
}
static void Main ()
{
int N = 9;
Console.Write(findNthNumber(N));
}
}
|
Javascript
<script>
function findNthNumber(N)
{
let result = 0;
let p = 1;
while (N > 0) {
result += (p * (N % 9));
N = parseInt(N / 9, 10);
p = p * 10;
}
return result;
}
let N = 9;
document.write(findNthNumber(N));
</script>
|
Time Complexity: O(log9 N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...