# Find the greater number closest to N having at most one non-zero digit

Given an integer N, the task is to find the closest number to N which is greater than N and contains at most one non-zero digit.

Examples:

Input: N = 540
Output: 600
Explanation: Since the number 600 contains only one non-zero digit, it is the required output is 600.

Input: N = 1000
Output: 2000

Approach: The problem can be solved based on the following observations. Follow the steps below to solve the problem:

1. Initialize a variable, say, ctr to store the count of digits in N.
2. Compute the value of power(10, ctr – 1)
3. Print the value of the above-mentioned formula as the required answer.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement` `// the above approach`   `#include ` `using` `namespace` `std;`   `// Function to calculate` `// X ^ n in log(n)` `int` `power(``int` `X, ``int` `n) {` `    `  `    ``// Stores the value ` `    ``// of X^n` `    ``int` `res = 1;` `    ``while``(n) {`   `        ``// If N is odd` `        ``if``(n & 1)` `        ``res = res * X;` `        `  `        ``X = X * X;` `        ``n = n >> 1;` `    ``}` `    ``return` `res;` `    `  `}`   `// Function to find the` `// closest number > N having ` `// at most 1 non-zero digit` `int` `closestgtNum(``int` `N) {` `    `  `    ``// Stores the count ` `    ``// of digits in N` `    ``int` `n = ``log10``(N) + 1;` `    `  `    ``// Stores the power ` `    ``// of 10^(n-1)` `    ``int` `P = power(10, n - 1);` `    `  `    ``// Stores the ` `    ``// last (n - 1) digits` `    ``int` `Y = N % P;` `    `  `    ``// Store the answer` `    ``int` `res = N + (P - Y);` `    `  `    ``return` `res;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 120;` `    ``cout<

## Java

 `// Java program to implement ` `// the above approach ` `import` `java.io.*;`   `class` `GFG{` ` `  `// Function to calculate` `// X ^ n in log(n)` `static` `int` `power(``int` `X, ``int` `n) ` `{` `    `  `    ``// Stores the value ` `    ``// of X^n` `    ``int` `res = ``1``;` `    `  `    ``while``(n != ``0``) ` `    ``{` `        `  `        ``// If N is odd` `        ``if` `((n & ``1``) != ``0``)` `            ``res = res * X;` `         `  `        ``X = X * X;` `        ``n = n >> ``1``;` `    ``}` `    ``return` `res;` `}` ` `  `// Function to find the` `// closest number > N having ` `// at most 1 non-zero digit` `static` `int` `closestgtNum(``int` `N)` `{` `    `  `    ``// Stores the count ` `    ``// of digits in N` `    ``int` `n = (``int``) Math.log10(N) + ``1``;` `     `  `    ``// Stores the power ` `    ``// of 10^(n-1)` `    ``int` `P = power(``10``, n - ``1``);` `     `  `    ``// Stores the ` `    ``// last (n - 1) digits` `    ``int` `Y = N % P;` `     `  `    ``// Store the answer` `    ``int` `res = N + (P - Y);` `     `  `    ``return` `res;` `}` ` `  `// Driver Code` `public` `static` `void` `main (String[] args) ` `{` `    ``int` `N = ``120``;` ` `  `    ``// Function call` `    ``System.out.print(closestgtNum(N));` `}` `}`   `// This code is contributed by code_hunt`

## Python3

 `# Python3 program to implement ` `# the above approach ` `import` `math`   `# Function to calculate` `# X ^ n in log(n)` `def` `power(X, n):` `     `  `    ``# Stores the value ` `    ``# of X^n` `    ``res ``=` `1` `    `  `    ``while` `(n !``=` `0``):` ` `  `        ``# If N is odd` `        ``if` `(n & ``1` `!``=` `0``):` `            ``res ``=` `res ``*` `X` `         `  `        ``X ``=` `X ``*` `X` `        ``n ``=` `n >> ``1` `    `  `    ``return` `res` `     `  `# Function to find the` `# closest number > N having ` `# at most 1 non-zero digit` `def` `closestgtNum(N):` `     `  `    ``# Stores the count ` `    ``# of digits in N` `    ``n ``=` `int``(math.log10(N) ``+` `1``)` `     `  `    ``# Stores the power ` `    ``# of 10^(n-1)` `    ``P ``=` `power(``10``, n ``-` `1``)` `     `  `    ``# Stores the ` `    ``# last (n - 1) digits` `    ``Y ``=` `N ``%` `P` `     `  `    ``# Store the answer` `    ``res ``=` `N ``+` `(P ``-` `Y)` `     `  `    ``return` `res`   `# Driver Code` `N ``=` `120`   `print``(closestgtNum(N))`   `# This code is contributed by code_hunt`

## C#

 `// C# program to implement ` `// the above approach ` `using` `System;`   `class` `GFG{` ` `  `// Function to calculate` `// X ^ n in log(n)` `static` `int` `power(``int` `X, ``int` `n)` `{` `    `  `    ``// Stores the value ` `    ``// of X^n` `    ``int` `res = 1;` `    `  `    ``while``(n != 0)` `    ``{` `        `  `        ``// If N is odd` `        ``if` `((n & 1) != 0)` `            ``res = res * X;` `         `  `        ``X = X * X;` `        ``n = n >> 1;` `    ``}` `    ``return` `res;` `}` ` `  `// Function to find the` `// closest number > N having ` `// at most 1 non-zero digit` `static` `int` `closestgtNum(``int` `N) ` `{` `    `  `    ``// Stores the count ` `    ``// of digits in N` `    ``int` `n = (``int``) Math.Log10(N) + 1;` `     `  `    ``// Stores the power ` `    ``// of 10^(n-1)` `    ``int` `P = power(10, n - 1);` `     `  `    ``// Stores the ` `    ``// last (n - 1) digits` `    ``int` `Y = N % P;` `     `  `    ``// Store the answer` `    ``int` `res = N + (P - Y);` `     `  `    ``return` `res;` `}` ` `  `// Driver Code` `public` `static` `void` `Main () ` `{` `    ``int` `N = 120;` ` `  `    ``// Function call` `    ``Console.Write(closestgtNum(N));` `}` `}`   `// This code is contributed by code_hunt`

Output

```200

```

Time Complexity: O(log2N)
Auxiliary Space: O(log10N)

Efficient Approach:The idea is to increment the value of the first digit of the given integer by 1 and initialize the resultant string to the first digit of the given integer. Finally, append (N – 1) 0s at the end of the resultant string and return the resultant string.

1. Initialize a string, say res to store the closest greater number with st most one non-zero digit.
2. First append the value str + 1 at the resultant string and then append (N – 1) 0s at the end of resultant string.
3. Print the value of res

Below is the implementation of the above approach:

## C++

 `// C++ program to implement` `// the above approach` `#include ` `using` `namespace` `std;`   `// Function to get closest greater` `// number with at most non zero digit` `string closestgtNum(string str)` `{` `    ``// Stores the closest greater number ` `    ``// with at most one non-zero digit` `    ``string res = ``""``;` `    `  `    ``// Stores length of str` `    ``int` `n = str.length();` `    `  `    `  `    ``if``(str < ``'9'``) {` `        ``res.push_back(str + 1);` `    ``}` `    ``else``{` `        `  `        ``// Append 10 to the end` `        ``// of resultant string` `        ``res.push_back(``'1'``);` `        ``res.push_back(``'0'``);` `    ``}` `    `  `    ``// Append n-1 times '0' to the end ` `    ``// of resultant string` `    ``for``(``int` `i = 0; i < n - 1; i++)` `    ``{` `        ``res.push_back(``'0'``);` `    ``}` `    ``return` `res;` `    `  `    `  `}`   `// Driver Code` `int` `main()` `{` `    ``string str = ``"120"``;` `    ``cout<

## Java

 `// Java program to implement` `// the above approach` `import` `java.util.*;`   `class` `GFG{`   `// Function to get closest greater` `// number with at most non zero digit` `static` `String closestgtNum(String str)` `{` `    `  `    ``// Stores the closest greater number ` `    ``// with at most one non-zero digit` `    ``String res = ``""``;` `    `  `    ``// Stores length of str` `    ``int` `n = str.length();` `    `  `    ``if` `(str.charAt(``0``) < ``'9'``) ` `    ``{` `        ``res += (``char``)(str.charAt(``0``) + ``1``);` `    ``}` `    ``else` `    ``{` `        `  `        ``// Append 10 to the end` `        ``// of resultant String` `        ``res += (``char``)(``'1'``);` `        ``res += (``char``)(``'0'``);` `    ``}` `    `  `    ``// Append n-1 times '0' to the end ` `    ``// of resultant String` `    ``for``(``int` `i = ``0``; i < n - ``1``; i++)` `    ``{` `        ``res += (``char``)(``'0'``);` `    ``}` `    ``return` `res;` `}`   `// Driver Code` `public` `static` `void` `main(String[] args)` `{` `    ``String str = ``"120"``;` `    `  `    ``System.out.print(closestgtNum(str));` `}` `}`   `// This code is contributed by Amit Katiyar`

## Python3

 `# Python3 program to implement` `# the above approach`   `# Function to get closest greater` `# number with at most non zero digit` `def` `closestgtNum(``str``):` `    `  `    ``# Stores the closest greater number` `    ``# with at most one non-zero digit` `    ``res ``=` `"";`   `    ``# Stores length of str` `    ``n ``=` `len``(``str``);`   `    ``if` `(``str``[``0``] < ``'9'``):` `        ``res ``+``=` `(``chr``)(``ord``(``str``[``0``]) ``+` `1``);` `    ``else``:`   `        ``# Append 10 to the end` `        ``# of resultant String` `        ``res ``+``=` `(``chr``)(``'1'``);` `        ``res ``+``=` `(``chr``)(``'0'``);`   `    ``# Append n-1 times '0' to the end` `    ``# of resultant String` `    ``for` `i ``in` `range``(n ``-` `1``):` `        ``res ``+``=` `(``'0'``);`   `    ``return` `res;`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `    `  `    ``str` `=` `"120"``;`   `    ``print``(closestgtNum(``str``));`   `# This code is contributed by Amit Katiyar`

## C#

 `// C# program to implement` `// the above approach` `using` `System;`   `class` `GFG{` `    `  `// Function to get closest greater` `// number with at most non zero digit` `public` `static` `string` `closestgtNum(``string` `str)` `{` `    `  `    ``// Stores the closest greater number ` `    ``// with at most one non-zero digit` `    ``string` `res = ``""``;` `     `  `    ``// Stores length of str` `    ``int` `n = str.Length;` `     `  `    ``if` `(str < ``'9'``)` `    ``{` `        ``res = res + (``char``)(str + 1);` `    ``}` `    ``else` `    ``{` `        `  `        ``// Append 10 to the end` `        ``// of resultant string` `        ``res = res + ``'1'``;` `        ``res = res + ``'0'``;` `    ``}` `     `  `    ``// Append n-1 times '0' to the end ` `    ``// of resultant string` `    ``for``(``int` `i = 0; i < n - 1; i++)` `    ``{` `        ``res = res + ``'0'``;` `    ``}` `    ``return` `res;` `}`   `// Driver code` `static` `void` `Main() ` `{` `    ``string` `str = ``"120"``;` `    `  `    ``Console.WriteLine(closestgtNum(str));` `}` `}`   `// This code is contributed by divyeshrabadiya07`

Output

```200

```

Time Complexity: O(log10N)
Auxiliary Space: O(log10N)

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 Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.