题目描述
我有一个非常简单的问题要问你。给定两个整数A和B,你要做的就是计算A + B的和。
input
输入的第一行包含整数T(1 <= T <= 20),表示测试用例的数量。 然后是T行,每行包含两个正整数,A和B.请注意,整数非常大,这意味着您不应该使用32位整数来处理它们。 您可以假设每个整数的长度不超过1000
output
对于每个测试用例,您应输出两行。 第一行是“Case#:”,#表示测试用例的编号。 第二行是方程“A + B = Sum”,Sum表示A + B的结果。注意方程中有一些空格。 在两个测试用例之间输出一个空行。
思路分析
这是一个大数问题,输入的值不能用常见的int long 等来表示,因此考虑字符数组存储然后逐位相加
重点在于:进位 本位数字为 (a+b+前一位进位)%10 进位为 (a+b+前一位进位)/10
最后要注意输出的格式,最后一个输出后不用换行
源代码
#include<iostream>
#include<cstring>
using namespace std;
char a[1010],b[1010],c[1010],d[1010];
int main()
{
int n,len,count=0;
cin>>n;
while(n--){
count+=1;
cin>>a>>b;
int len1 = strlen(a);
int len2 = strlen(b);
int t1=0;
//将a串反转
for(int i=len1-1;i>=0;i--){
c[t1] = a[i];
++t1;
}
t1=0;
//将b串反转
for(int i=len2-1;i>=0;i--){
d[t1] = b[i];
++t1;
}
//补位
if(len1>len2){
len = len1;
for(int i=len2;i<len1;i++)
{
d[i] = '0';
}
}else{
len = len2;
for(int i=len1;i<len2;i++)
{
c[i] = '0';
}
}
//逐个相加
int a1,b1,t=0;
for(int i=0;i<len;i++){
a1 = c[i]-'0';
b1 = d[i]-'0';
d[i] = (a1+b1+t)%10+'0';//本位
t = (a1+b1+t)/10;//进位
}
cout<<"Case "<<count<<":"<<endl;
cout<<a<<" "<<"+ "<<b<<" = ";
//输出 这里判断一下最高位是否需要进位,是则给最高位赋值进位,否不用管
if(t!=0){
d[len]=t+'0';
}
for(int i=len-1;i>=0;i--)
cout<<d[i];
if(n!=0)
cout<<endl<<endl;
else
cout<<endl;
}
}