题意:就是求a+b (a,b都不超过1000位)
思路:用数组存储
第一道大数的题目,虽然很水,纪念一下!
代码:
#include<cstdio>
#include<cstring>
int main(){
int t,lena,lenb,i,j,sum,testcase=0;
char a[1024],b[1024];
char c[1024];//存 a+b
int co;//进位
scanf("%d",&t);
int tt=t;
while(t--){
co=0;
memset(c,'\0',sizeof(c));
testcase++;
scanf("%s%s",a,b);
lena=strlen(a);
lenb=strlen(b);
if(lena<lenb){//b长
for(i=lena-1,j=lenb-1;i>=0;i--,j--){
sum=(a[i]-'0')+(b[j]-'0')+co;
c[j]='0'+sum%10;
co=sum/10;
}
for(;j>=0;j--){
sum=b[j]-'0'+co;
c[j]='0'+sum%10;
co=sum/10;
}
}
else{//否则
for(i=lena-1,j=lenb-1;j>=0;i--,j--){
sum=(a[i]-'0')+(b[j]-'0')+co;
c[i]='0'+sum%10;
co=sum/10;
}
for(;i>=0;i--){
sum=a[i]-'0'+co;
c[i]='0'+sum%10;
co=sum/10;
}
}
printf("Case %d:\n",testcase);
printf("%s + %s = ",a,b);
if(co!=0) printf("%d",co);//最高位有溢出,则输出最高位的进位
printf("%s\n",c);
if(testcase<tt) printf("\n");//注意格式,最后一组没有空行
}
return 0;
}