Given two integers N and K, the task is to find the minimum integer X that can be added to N so that the sum of the digits of the newly formed number does not exceed K.
Examples:
Input: N = 1, K = 1
Output: 0
Explanation:
The sum of the digits of the given number is 1, which is already equal to K(=1).Input: N = 11, K = 1
Output: 89
Explanation:
Adding the number 89 to the given number 11 results to 100.
The sum of digits of the new number formed is 1 which does not exceed K(=1).
Therefore, the minimum number that can be added is 89.
Approach: Follow the steps below to solve the problem:
- Check if the sum of the digits of the given number N does not exceed K or not. If found to be true, then the least number added is 0.
- Now, start calculating the sum of digits from the unit’s place and continue until the sum of digits exceeds K.
- Now, the part of N having a sum of the digits greater than or equal to K is found. So, eliminate the last digit of that part so that the sum of the digits becomes less than K.
- Now, add 1 to the newly obtained number as it will keep the sum of the digits less than or equal to K.
- Now, to obtain the new number which exceeds N and has the number of digits less than or equal to K, multiply the number with 10P + 1, where P is the count of digits up to which sum did not exceed K.
- Now subtract N from the new number to get the result X.
- Print the value of X after completing the above steps.
Below is the implementation of the above approach:
// 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 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 |
# 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# 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 |
<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
Time Complexity: O(log10N)
Auxiliary Space: O(1)