问题描述
问题 - 给定两个正整数 a 和 b。只需一步,您就可以将 a 增加 1(将 a 替换为 a+1)。你的任务是找到你需要做的最小移动次数,以使 a 被 b 整除。有可能您必须进行 0 次移动,因为 a 已经可以被 b 整除。您必须回答 t 个独立的测试用例。
输入 - 输入的第一行包含一个整数 t (1≤t≤10^4)——测试用例的数量。然后是 t 个测试用例。
测试用例的唯一一行包含两个整数a和b(1≤a,b≤10^9)。
输出 - 对于每个测试用例,打印答案 - 使 a 被 b 整除所需的最少移动次数。
Code Forces 问题链接 - https://codeforces.com/problemset/problem/1328/A
时间限制 - 每个测试用例 1 秒
我的代码 -
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
long long t,a,b,x;
cin >> t;
for(long long i=0;i<t;i++){
cin >> a >> b;
x = a;
while(a%b!=0){
a++;
}
cout << a-x << endl;
}
}
当测试用例数为 10000 并且输入数量很大时失败。我可以做些什么来减少代码的执行时间?
解决方法
您需要找到 m 使得 a + m = kb 且 0≤m
所以 m = 天花板 (a/b) b - a.