整除
描述
给定两个整数 a 和 b。
每次操作可以将 a增加 1。
请问,最少几次操作以后 a就能够被 b整除。
输入
第一行包含整数 T,表示共有 T组测试数据。
每组数据占一行,包含两个整数 a和 b。
输出
每组数据输出一行结果,表示最少操作次数。数据范围前三个测试点满足,1≤T≤5。
所有测试点满足,1≤T≤104,1≤a,b≤109。
输入样例 1
5
10 4
13 9
100 13
123 456
92 46
输出样例 1
2
5
4
333
0
代码实现:
解法一:
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--){
int a,b,c=0,i=1;
scanf("%d%d",&a,&b);
while(a%b!=0){
if(i*b>=a){
c=b*i;
break;
}
i++;
}
if(c==0)
printf("%d\n",0);
else
printf("%d\n",c-a);
}
return 0;
}
总结、
- t–和i++一样可来计数,前者在于达到t=0的时候跳出循环,后者在于达到某个限度
- printf()要习惯带’\n’
- 要发现规律,比如通过a,b来求出操作数这种
解法二:
先把整数倍的挑出来,然后根据a,b的大小来分类判断要操作几次
#include<stdio.h>
int main()
{
int a,b;
int t;
scanf("%d",&t);
while(t--){
int cnt=0;
scanf("%d%d",&a,&b);
if(a%b==0){
printf("%d",0);
}else{
if(a<b){
cnt=b-a;
printf("%d",cnt);
}else if(a>b){
cnt=(a/b+1)*b-a;
printf("%d",cnt);
}else{
printf("%d",0);
}
}
}
return 0;
}
解法
#include<stdio.h>
int main()
{
int a,b,t;
int i,cnt=0;
scanf("%d",&t);
while(t--){
scanf("%d%d",&a,&b);
cnt=(b-(a%b))%b;
printf("%d",cnt);
}
return 0;
}