Open In App

# 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`

## Javascript

 ``

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[0] + 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[0] < ``'9'``) {``        ``res.push_back(str[0] + 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[0] < ``'9'``)``    ``{``        ``res = res + (``char``)(str[0] + 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`

## Javascript

 ``

Output

`200`

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