Minimum value of X that can be added to N to minimize sum of the digits to ≤ K
Last Updated :
22 Apr, 2021
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++
#include <bits/stdc++.h>
using namespace std;
int minDigits( int N, int K)
{
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;
while (num2 != 0) {
sum += num2 % 10;
num2 /= 10;
}
if (sum <= K) {
X = 0;
}
else {
while (temp > 0) {
var = (N / ( pow (10, temp - 1)));
temp_sum += var % 10;
if (temp_sum >= K) {
var /= 10;
var++;
result
= var * pow (10, temp);
break ;
}
temp--;
}
X = result - N;
return X;
}
}
int main()
{
int N = 11, K = 1;
cout << minDigits(N, K);
return 0;
}
|
Java
import java.util.*;
import java.io.*;
class GFG{
static int minDigits( int N, int K)
{
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;
while (num2 != 0 )
{
sum += num2 % 10 ;
num2 /= 10 ;
}
if (sum <= K)
{
X = 0 ;
}
else
{
while (temp > 0 )
{
var = (N / (( int )Math.pow(
10 , temp - 1 )));
temp_sum += var % 10 ;
if (temp_sum >= K)
{
var /= 10 ;
var++;
result = var * ( int )Math.pow(
10 , temp);
break ;
}
temp--;
}
X = result - N;
return X;
}
return - 1 ;
}
public static void main(String args[])
{
int N = 11 ;
int K = 1 ;
System.out.println(minDigits(N, K));
}
}
|
Python3
import math;
def minDigits(N, K):
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;
while (num2 ! = 0 ):
sum1 + = num2 % 10 ;
num2 / = 10 ;
if (sum1 < = K):
X = 0 ;
else :
while (temp > 0 ):
var = int (N / / ( pow ( 10 , temp - 1 )));
temp_sum + = var % 10 ;
if (temp_sum > = K):
var = var / / 10 ;
var + = 1 ;
result = var * int ( pow ( 10 , temp));
break ;
temp - = 1 ;
X = result - N;
return X;
return - 1 ;
if __name__ = = '__main__' :
N = 11 ;
K = 1 ;
print (minDigits(N, K));
|
C#
using System;
class GFG{
static int minDigits( int N, int K)
{
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;
while (num2 != 0)
{
sum += num2 % 10;
num2 /= 10;
}
if (sum <= K)
{
X = 0;
}
else
{
while (temp > 0)
{
var = (N / (( int )Math.Pow(
10, temp - 1)));
temp_sum += var % 10;
if (temp_sum >= K)
{
var /= 10;
var ++;
result = var * ( int )Math.Pow(
10, temp);
break ;
}
temp--;
}
X = result - N;
return X;
}
return -1;
}
public static void Main(String []args)
{
int N = 11;
int K = 1;
Console.WriteLine(minDigits(N, K));
}
}
|
Javascript
<script>
function minDigits(N, K)
{
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;
while (num2 != 0) {
sum += num2 % 10;
num2 = parseInt(num2 / 10);
}
if (sum <= K) {
X = 0;
}
else {
while (temp > 0) {
var1 = parseInt(N / (Math.pow(10, temp - 1)));
temp_sum += var1 % 10;
if (temp_sum >= K) {
var1 = parseInt(var1 / 10);
var1++;
result
= var1 * Math.pow(10, temp);
break ;
}
temp--;
}
X = result - N;
return X;
}
}
let N = 11, K = 1;
document.write(minDigits(N, K));
</script>
|
Time Complexity: O(log10N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...