Dado un número entero N , la tarea es encontrar el número más cercano a N que sea mayor que N y que contenga como máximo un dígito distinto de cero .
Ejemplos:
Entrada : N = 540
Salida: 600
Explicación: Dado que el número 600 contiene solo un dígito distinto de cero, la salida requerida es 600.Entrada : N = 1000
Salida: 2000
Enfoque: El problema se puede resolver con base en las siguientes observaciones.
Siga los pasos a continuación para resolver el problema:
- Inicialice una variable, por ejemplo, ctr para almacenar el recuento de dígitos en N .
- Calcule el valor de la potencia (10, ctr – 1 )
- Imprima el valor de la fórmula mencionada anteriormente como la respuesta requerida.
A continuación se muestra la implementación del enfoque anterior:
C++
// 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
// 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
<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
Complejidad de tiempo: O(log 2 N)
Espacio auxiliar: O(log 10 N)
Enfoque eficiente: la idea es incrementar el valor del primer dígito del entero dado en 1 e inicializar la string resultante al primer dígito del entero dado. Finalmente, agregue (N – 1) 0 s al final de la string resultante y devuelva la string resultante.
- Inicialice una string, diga res para almacenar el número mayor más cercano con st más un dígito distinto de cero.
- Primero agregue el valor str[0] + 1 en la string resultante y luego agregue (N – 1) 0 s al final de la string resultante.
- Imprimir el valor de res
A continuación se muestra la implementación del enfoque anterior:
C++
// 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
// 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
<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
Complejidad de tiempo: O(log 10 N)
Espacio auxiliar: O(log 10 N)
Publicación traducida automáticamente
Artículo escrito por aanchaltiwari y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA