題意
給你一個兩個數m和n m可以不斷地加一直到m所有位上的數位之和小於或等於n,最少可以加多少可以達到要求。
思路
如果最開始m所有位上數位之和小於或等於n就不用加直接輸出0
每個位只有加到10進位剩下0的時候才會減少,我們可以從個位開始遍歷m各個位數,每進一位總和會減少,判定一次,符合就結束輸出。注意 99999這種情況,迴圈判定。
注意用pow計算10的次冪可能會不精確,自己單獨寫一個函數計算。
程式碼如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
long long int xx(int x)
{
long long int sum=1;
for(int i=0;i<x;i++){
sum=sum*10;
}
return sum;
}
using namespace std;
int main()
{
long long int t,n,x[101],sum,ans,m;
char s[101];
scanf("%lld",&t);
while(t--){
scanf("%s",&s);
scanf("%lld",&m);
ans=0;
sum=0;
for(int i=0;i<strlen(s);i++){
x[i]=s[i]-'0';
ans+=x[i];
}
for(int i=strlen(s)-1;i>=0;i--){
if(ans<=m){
break;
}else{
if(x[i]==0){
continue;
}
sum+=(10-x[i])*xx(strlen(s)-1-i);
while(1){
ans-=x[i];
if(x[i-1]==9){
x[i-1]=0;
ans-=9;
i--;
}else{
x[i-1]+=1;
ans+=1;
break;
}
}
}
}
printf("%lld\n",sum);
}
return 0;
}