题意:就是求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,' ',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: ",testcase); printf("%s + %s = ",a,b); if(co!=0) printf("%d",co);//最高位有溢出,则输出最高位的进位 printf("%s ",c); if(testcase<tt) printf(" ");//注意格式,最后一组没有空行 } return 0; }