A + B问题二
时间限制:3000 ms |内存限制:65535 KB|难度:3
描述
我对你有一个非常简单的问题。给定两个整数A和B,你的工作是计算A + B的总和。A,B必须是积极的。
输入
输入的第一行包含一个整数T(1 <= T <= 20),这意味着测试用例的数量。然后是T行,每行包含两个正整数A和B.请注意,整数非常大,这意味着您不应使用32位整数处理它们。你可以假设每个整数的长度不会超过1000。
输出
对于每个测试用例,你应该输出两行。第一行是“Case#:”,#表示测试用例的编号。第二行是等式“A + B = Sum”,Sum表示A + B的结果。注意等式中有一些空格。
样例输入
2
1 2
112233445566778899 998877665544332211
样例输出
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[1050],b[1050];
int c[1050],d[1050],e[1050],n,p;
cin>>n;
for(p=1;p<=n;p++)
{
cin>>a>>b;
int m=0,l=0;
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
memset(e,0,sizeof(e));//全部置0
for(int i=0;i<strlen(a);i++)//若a=123 即strlen(a)=3
{
d[i]=a[strlen(a)-1-i]-'0';//d[0]=a[2]=3,d[1]=a[1]=2,d[2]=a[0]=1,-0是因为字符转化数字
}
for(int i=0;i<strlen(b);i++)//b=456
{
e[i]=b[strlen(b)-1-i]-'0';
}
while(l<=strlen(a)||l<=strlen(b))
{
c[l]=d[l]+e[l]+m;//c[0]=d[0]+e[0]+0=3+6=9;即个位数相加
m=c[l]/10;//m统计进位,如果相加大于10,则m=1
c[l]=c[l]%10;//c[0]=9
l++;//从0开始统计最后的和的位数即最大为a或b的长度
}
if(m!=0) c[l]=m;//如果最后的进位不为0,则对应的位数等于进位
else
{
l--;
if(c[l]==0) l=l-1;//如果为0,则不进位
}
cout<<"Case "<<p<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
for(int j=l;j>=0;j--)
{
cout<<c[j];//因为计算时是从各位开始的,所以输出要倒着来
}
cout<<endl;
}
return 0;
}