Skip to content
Related Articles

Related Articles

Nth natural number after removing all numbers consisting of the digit 9
  • Difficulty Level : Expert
  • Last Updated : 25 Feb, 2021
GeeksforGeeks - Summer Carnival Banner

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.
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++




// C++ implementataion of above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find Nth number in base 9
long long findNthNumber(long long N)
{
    // Stores the Nth number
    long long result = 0;
 
    long long p = 1;
 
    // Iterate while N is
    // greater than 0
    while (N > 0) {
 
        // Update result
        result += (p * (N % 9));
 
        // Divide N by 9
        N = N / 9;
 
        // Multiply p by 10
        p = p * 10;
    }
    // Return result
    return result;
}
 
// Driver Code
int main()
{
    int N = 9;
    cout << findNthNumber(N);
    return 0;
}

Java




// Java program for the above approach
import java.util.*;
class GFG
{
 
  // Function to find Nth number in base 9
  static long findNthNumber(long N)
  {
 
    // Stores the Nth number
    long result = 0;
 
    long p = 1;
 
    // Iterate while N is
    // greater than 0
    while (N > 0) {
 
      // Update result
      result += (p * (N % 9));
 
      // Divide N by 9
      N = N / 9;
 
      // Multiply p by 10
      p = p * 10;
    }
 
    // Return result
    return result;
  }
 
  // Driver Code
  public static void main(String[] args)
  {
    int N = 9;
    System.out.print(findNthNumber(N));
  }
}
 
// This code is contributed by splevel62.

Python3




# Python 3 implementataion of above approach
 
# Function to find Nth number in base 9
def findNthNumber(N):
   
    # Stores the Nth number
    result = 0
    p = 1
 
    # Iterate while N is
    # greater than 0
    while (N > 0):
       
        # Update result
        result += (p * (N % 9))
 
        # Divide N by 9
        N = N // 9
 
        # Multiply p by 10
        p = p * 10
    # Return result
    return result
 
# Driver Code
if __name__ == '__main__':
    N = 9
    print(findNthNumber(N))
     
    # This code is contributed by bgangwar59.

C#




// C# implementataion of above approach
using System;
class GFG
{
  // Function to find Nth number in base 9
  static long findNthNumber(long N)
  {
    // Stores the Nth number
    long result = 0;
 
    long p = 1;
 
    // Iterate while N is
    // greater than 0
    while (N > 0) {
 
      // Update result
      result += (p * (N % 9));
 
      // Divide N by 9
      N = N / 9;
 
      // Multiply p by 10
      p = p * 10;
    }
     
    // Return result
    return result;
  }
 
  // Driver code 
  static void Main ()
  {
    int N = 9;
    Console.Write(findNthNumber(N));
  }
}
 
// This code is contributed by divyesh072019.

 
 

Output: 
10

 

Time Complexity: O(log9 N)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :