题目描述
小明很喜欢做a+b,他但经常忘记进位,所以他算88+12=90,而不是100。 现在你给了小明一些a+b的算式,请问他算出来会是什么?
输入
第一行是一个整数K,表示样例的个数。 每个样例占一行,为两个整数a,b,0≤a,b≤1e9。
输出
每行输出一个样例的结果,不要输出前导0。
样例输入
3 1 2 5 6 55 55
样例输出
3 1 0
思路:
1、取出a,b的每一位数字存放于arr数组,brr数组中
2、将数组的对应下标的数值进行相加存放于数组arr中,(arr[i]+brr[i])%10得到不进位计算方法下的值
3、为避免前导0,对得到的结果求数值处理
#include<stdio.h>
#include<math.h>
#include<string.h>
int arr[10], brr[10];
int main() {
int n;
scanf("%d", &n);
int a, b;
while (n--) {
scanf("%d %d", &a, &b);
int temp_a = a;
int temp_b = b;
int i = 0, j = 0;
while (temp_a) {//取出a的每一位存放于数组arr中
arr[i++] = temp_a % 10;
temp_a /= 10;
}
while (temp_b) {//取出b的每一位存放于数组brr中
brr[j++] = temp_b % 10;
temp_b /= 10;
}
int max=-1;
if(i>j) max=i;
else max=j;
for(int k=0;k<max;k++){//取余取出的数字,按照下标相加减就是加法的低位与低位相加 eg:23+123 数组arr:3 2 数组brr:3 2 1 结果等于6 4 1,经过下一步的下标逆序输出,就得到146
arr[k]=(arr[k]+brr[k])%10;
}
int sum=0;
for(int k=max-1;k>=0;k--){
sum=sum*10+arr[k];//用求和的方式,防止前导0
}
printf("%d\n",sum);
memset(arr,0,sizeof(arr));//将arr与brr数组重置为0
memset(brr,0,sizeof(brr));
}
return 0;
}