链接
A+B V
题面
题目描述
小明很喜欢做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
代码
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b;
scanf("%d%d",&a,&b);
int c[15],d[15];
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
int i=0,j=0;
while(a)
{
c[i]=a%10;
a/=10;
i++;
}
while(b)
{
d[j]=b%10;
b/=10;
j++;
}
int temp=max(i,j);
int sum=0,r=1;
for(int k=0;k<temp;k++)
{
sum+=((c[k]+d[k])%10)*r;
r*=10;
}
printf("%d\n",sum);
}
return 0;
}
思路
1.不要进位的话就是模拟加法,然后对10取余,也就是只要每一个数位的个位数字,类似于高精度加法:高精度加法
2.把数字的每一位存在数组里面,记录两个数字的数位,取这两个数位的最大值,循环这么多次,不进位就是把对应数位的数字加起来然后对10取余,只留下个位数字,把一个一个的数字拼接成一个多位数是一个算法模板,从高位开始,每一次循环,把当前数字乘以十
3.要点是把数字的每一位存在数组里面,然后用一个变量保存答案,如果用数组保存答案的话,处理前导零比较麻烦