随便写了几个数发现每十个数所得出来的差是不变的,在这个基础上数字越大差越大。这是符合单调性的,所以我们直接二分找刚好不满足的位置即可,这个位置最高只能是n。最后答案就是n-front。
代码如下:
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<utility>
#include<stack>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<map>
using namespace std;
int main() {
#ifndef ONLINE_JUDGE
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif
long long n, s;
scanf("%I64d%I64d", &n, &s);
long long front = 0, back = n + 1;
while(back - front > 1) {
long long mid = (front + back) / 2;
long long tmp = mid, sum = 0;
while(tmp) {
sum += tmp % 10;
tmp /= 10;
}
if(mid - sum >= s) {
back = mid;
} else {
front = mid;
}
}
printf("%I64d\n", n - front);
return 0;
}