Loguタイトル番号CF1409D桁の合計を減らす
アイデア:数字の意味は全員の合計です(たとえば、213、2 + 1 + 3 = 6)。まず、数値が<= sであるかどうかを判断し、満たされている場合は0を直接出力します。そうでない場合は、数値が運ばれないと数値が確実に増加するため、この数値を右から左にスキャンします(下位ビットのため)重量が小さく、キャリーコストが低い)、次に位置を0に設定します(つまり、0であるため、数値に影響がないかどうか、ビットが0の場合は、しないでください。 90、9を変更、1を10に変更、次に80、8に変更、1を9に変更など、事前に回答を追加するだけなので、気を付けてください。次の変更は1だけで、前もってあります。 )、次の桁を+1とし、結果にキャリーコスト(つまり、キャリービットの重みのコスト*必要な数をキャリー)を追加し、n / 10、数が<であるかどうかを判断し続けます。 = s、そしてそれを続けます。
コード
#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull t,n,s,total,ans,i;
ull shuma(ull x){
ull sum=0;
while(x){
sum+=x%10;
x/=10;
}
return sum;
}
int main(){
scanf("%llu",&t);
while(t--){
ans=0;
scanf("%llu%llu",&n,&s);
total=shuma(n);
if(total<=s){
printf("0\n");
continue;
}
for(i=1;shuma(n)>s;i*=10){
ans+=(10-n%10)*i;
n/=10;
n++;
}
printf("%llu\n",ans);
}
}