Dados dos números enteros N y K , la tarea es encontrar el número entero mínimo X que se puede sumar a N para que la suma de los dígitos del número recién formado no exceda K.
Ejemplos:
Entrada: N = 1, K = 1
Salida: 0
Explicación:
La suma de los dígitos del número dado es 1, que ya es igual a K(=1).Entrada: N = 11, K = 1
Salida: 89
Explicación:
Sumar el número 89 al número dado 11 da como resultado 100.
La suma de los dígitos del nuevo número formado es 1, que no excede K(=1).
Por lo tanto, el número mínimo que se puede sumar es 89.
Enfoque: siga los pasos a continuación para resolver el problema:
- Comprueba si la suma de los dígitos del número dado N no supera a K o no. Si se determina que es cierto, entonces el menor número agregado es 0.
- Ahora, comience a calcular la suma de dígitos desde el lugar de la unidad y continúe hasta que la suma de dígitos exceda K .
- Ahora, se encuentra la parte de N que tiene una suma de dígitos mayor o igual que K. Entonces, elimine el último dígito de esa parte para que la suma de los dígitos sea menor que K .
- Ahora, agregue 1 al número recién obtenido, ya que mantendrá la suma de los dígitos menor o igual que K.
- Ahora, para obtener el nuevo número que excede a N y tiene el número de dígitos menor o igual a K , multiplique el número por 10 P + 1 , donde P es la cuenta de dígitos hasta la cual la suma no excedió a K.
- Ahora reste N del nuevo número para obtener el resultado X.
- Imprima el valor de X después de completar los pasos anteriores.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to find the minimum number // needed to be added so that the sum // of the digits does not exceed K int minDigits(int N, int K) { // Find the number of digits int digits_num = floor(log10(N) + 1); int temp_sum = 0; int temp = digits_num; int result; int X, var; int sum = 0; int num2 = N; // Calculate sum of the digits while (num2 != 0) { // Add the digits of num2 sum += num2 % 10; num2 /= 10; } // If the sum of the digits of N // is less than or equal to K if (sum <= K) { // No number needs to // be added X = 0; } // Otherwise else { while (temp > 0) { // Calculate the sum of digits // from least significant digit var = (N / (pow(10, temp - 1))); temp_sum += var % 10; // If sum exceeds K if (temp_sum >= K) { // Increase previous // digit by 1 var /= 10; var++; // Add zeros to the end result = var * pow(10, temp); break; } temp--; } // Calculate difference // between the result and N X = result - N; // Return the result return X; } } // Driver Code int main() { int N = 11, K = 1; cout << minDigits(N, K); return 0; }
Java
// Java program for the above approach import java.util.*; import java.io.*; class GFG{ // Function to find the minimum number // needed to be added so that the sum // of the digits does not exceed K static int minDigits(int N, int K) { // Find the number of digits int digits_num = (int)Math.floor( Math.log(N) + 1); int temp_sum = 0; int temp = digits_num; int result = 0; int X, var; int sum = 0; int num2 = N; // Calculate sum of the digits while (num2 != 0) { // Add the digits of num2 sum += num2 % 10; num2 /= 10; } // If the sum of the digits of N // is less than or equal to K if (sum <= K) { // No number needs to // be added X = 0; } // Otherwise else { while (temp > 0) { // Calculate the sum of digits // from least significant digit var = (N / ((int)Math.pow( 10, temp - 1))); temp_sum += var % 10; // If sum exceeds K if (temp_sum >= K) { // Increase previous // digit by 1 var /= 10; var++; // Add zeros to the end result = var * (int)Math.pow( 10, temp); break; } temp--; } // Calculate difference // between the result and N X = result - N; // Return the result return X; } return -1; } // Driver Code public static void main(String args[]) { int N = 11; int K = 1; System.out.println(minDigits(N, K)); } } // This code is contributed by bikram2001jha
Python3
# Python program for # the above approach import math; # Function to find the minimum number # needed to be added so that the sum # of the digits does not exceed K def minDigits(N, K): # Find the number of digits digits_num = int(math.floor(math.log(N) + 1)); temp_sum = 0; temp = digits_num; result = 0; X = 0; var = 0; sum1 = 0; num2 = N; # Calculate sum of the digits while (num2 != 0): # Add the digits of num2 sum1 += num2 % 10; num2 /= 10; # If the sum of the digits of N # is less than or equal to K if (sum1 <= K): # No number needs to # be added X = 0; # Otherwise else: while (temp > 0): # Calculate the sum of digits # from least significant digit var = int(N // (pow(10, temp - 1))); temp_sum += var % 10; # If sum exceeds K if (temp_sum >= K): # Increase previous # digit by 1 var = var // 10; var += 1; # Add zeros to the end result = var * int(pow(10, temp)); break; temp -= 1; # Calculate difference # between the result and N X = result - N; # Return the result return X; return -1; # Driver Code if __name__ == '__main__': N = 11; K = 1; print(minDigits(N, K)); # This code is contributed by 29AjayKumar
C#
// C# program for the above approach using System; class GFG{ // Function to find the minimum number // needed to be added so that the sum // of the digits does not exceed K static int minDigits(int N, int K) { // Find the number of digits int digits_num = (int)Math.Floor( Math.Log(N) + 1); int temp_sum = 0; int temp = digits_num; int result = 0; int X, var; int sum = 0; int num2 = N; // Calculate sum of the digits while (num2 != 0) { // Add the digits of num2 sum += num2 % 10; num2 /= 10; } // If the sum of the digits of N // is less than or equal to K if (sum <= K) { // No number needs to // be added X = 0; } // Otherwise else { while (temp > 0) { // Calculate the sum of digits // from least significant digit var = (N / ((int)Math.Pow( 10, temp - 1))); temp_sum += var % 10; // If sum exceeds K if (temp_sum >= K) { // Increase previous // digit by 1 var /= 10; var++; // Add zeros to the end result = var * (int)Math.Pow( 10, temp); break; } temp--; } // Calculate difference // between the result and N X = result - N; // Return the result return X; } return -1; } // Driver Code public static void Main(String []args) { int N = 11; int K = 1; Console.WriteLine(minDigits(N, K)); } } // This code is contributed by Amit Katiyar
Javascript
<script> // Javascript program for the above approach // Function to find the minimum number // needed to be added so that the sum // of the digits does not exceed K function minDigits(N, K) { // Find the number of digits let digits_num = Math.floor(Math.log(N) / Math.log(10) + 1); let temp_sum = 0; let temp = digits_num; let result; let X, var1; let sum = 0; let num2 = N; // Calculate sum of the digits while (num2 != 0) { // Add the digits of num2 sum += num2 % 10; num2 = parseInt(num2 / 10); } // If the sum of the digits of N // is less than or equal to K if (sum <= K) { // No number needs to // be added X = 0; } // Otherwise else { while (temp > 0) { // Calculate the sum of digits // from least significant digit var1 = parseInt(N / (Math.pow(10, temp - 1))); temp_sum += var1 % 10; // If sum exceeds K if (temp_sum >= K) { // Increase previous // digit by 1 var1 = parseInt(var1 / 10); var1++; // Add zeros to the end result = var1 * Math.pow(10, temp); break; } temp--; } // Calculate difference // between the result and N X = result - N; // Return the result return X; } } // Driver Code let N = 11, K = 1; document.write(minDigits(N, K)); // This code is contributed by souravmahato348. </script>
89
Complejidad de tiempo: O(log 10 N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por amartyabhattacharya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA