洛谷CF1409D桁の合計を減らす

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);
	}
}

おすすめ

転載: blog.csdn.net/weixin_52536621/article/details/113920795