持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
本文已参与「新人创作礼」活动,一 起开启掘金创作之路。
D. Decrease the Sum of Digits
题目
中文大意
给你一个数字n每次可以操作一次让数字n加一问最少多少次可以让数字n的数位和小于等于S
题目分析
假设数字是11514我们可以发现使用最小次数让数字的数位和变小操作次数是6也就是将数字11514变成11520 通过这个例子我们可以发现如果想使花费最小的代价让数字的数位和减小就是让这个数字的进位所以我们只需要按照每一位的进位进行枚举即可
Code
int a[N];
int len;
void solve()
{
int a,b; cin >> a >> b;
auto check = [&](int x) {
int num = 0;
while(x) num += x % 10, x/= 10;
return num <= b;
};
if(check(a)) {
cout << 0 << endl;
return;
}
for(int i = 10; i <= 1e18; i *= 10) {
if(check(a + (i - a % i))) {
cout << i - a % i << endl;
return;
}
}
}