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:
- Initialize a variable, say, ctr to store the count of digits in N.
- Compute the value of power(10, ctr – 1)
- Print the value of the above-mentioned formula as the required answer.
Below is the implementation of the above approach:
// C++ program to implement // the above approach #include <bits/stdc++.h> 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<<closestgtNum(N);
} |
// 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 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# 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 |
<script> // JavaScript program to implement // the above approach // Function to calculate // X ^ n in log(n) function power(X, n)
{ // Stores the value
// of X^n
var 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 function closestgtNum(N)
{ // Stores the count
// of digits in N
var n = parseInt( Math.log10(N) + 1);
// Stores the power
// of 10^(n-1)
var P = power(10, n - 1);
// Stores the
// last (n - 1) digits
var Y = N % P;
// Store the answer
var res = N + (P - Y);
return res;
} // Driver Code var N = 120;
// Function call document.write(closestgtNum(N)); </script> |
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.
- Initialize a string, say res to store the closest greater number with st most one non-zero digit.
- First append the value str[0] + 1 at the resultant string and then append (N – 1) 0s at the end of resultant string.
- Print the value of res
Below is the implementation of the above approach:
// C++ program to implement // the above approach #include <bits/stdc++.h> 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<<closestgtNum(str);
} |
// 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 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# 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 |
<script> // Javascript program to implement // the above approach // Function to get closest greater // number with at most non zero digit function closestgtNum(str)
{ // Stores the closest greater number
// with at most one non-zero digit
var res = "" ;
// Stores length of str
var n = str.length;
if (str[0] < '9' )
{
res = res + String.fromCharCode(str[0].charCodeAt(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 ( var i = 0; i < n - 1; i++)
{
res = res + '0' ;
}
return res;
} // Driver code var str = "120" ;
document.write(closestgtNum(str)); // This code is contributed by itsok. </script> |
200
Time Complexity: O(log10N)
Auxiliary Space: O(log10N)