题目地址
垃圾如我。
题目含义:给你两个数
a
,
b
a, b
a,b,求大于等于a 的某数的各位加起来小于b最小是多少。
思路:我们在加的时候发现只有进位的时候才会存在数字相加和减少的情况,所以我们只考虑进位的情况,当然我们不可能在个位一位一位的加一再进行判断,所以我们需要跳过某些不可能的数字,我们发现当存在 x x x x 00 xxxx00 xxxx00这种末尾几位是零情况的时候,若这种情况不合法,那么我们没有必要在后边几位上继续加,因为这样一定是不合法的,所以我们只能寄希望于更高位的进位,,这样造成的结果一定是后边的0越来越多,所以我们利用这种方法进行快速的求解。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 2e5 + 10;
vector <int> a, b;
int get_sum (long long x)
{
int cnt = 0;
while (x)
{
cnt += x % 10;
x /= 10;
}
return cnt;
}
int main()
{
int T; scanf ("%d", &T);
while (T --)
{
long long a, b; scanf ("%lld%lld", &a, &b);
long long ans = 0, t = 1;
while (get_sum (a) > b) // 爬爬爬爬爬
{
if (a % 10) a ++, ans += t;
else a /= 10, t *= 10;
}
printf ("%lld\n", ans);
}
return 0;
}