#include<stdio.h> #include<string.h> void Daoxu(int str[],int n);/*定义一个倒序数组的函数,n为数组中元素个数*/ void Daoxu(int str[],int n) { int key; --n; for(int i=0;i<n;++i,--n) { key=str[i]; str[i]=str[n]; str[n]=key; } } int a[1001],b[1001],c[10001]; int main(void) { int t; while(scanf("%d",&t)==1) { int ll=1; getchar(); while(t--) { memset(a,'\0',sizeof(a)); memset(b,'\0',sizeof(b)); int i=0,j=0,x; while((x=getchar())!=' ') { a[i]=x-'0'; c[i]=x-'0'; ++i; }/*将加数存入数组a【】,i为数组中元素个数*/ while((x=getchar())!='\n') { b[j]=x-'0'; ++j; }/*将加数存入数组b【】,j为数组b中元素个数*/ Daoxu(a,i); Daoxu(b,j); int maxline; if(i>j) { maxline=i; } else { maxline=j; }/*找出最长数*/ for(int i=0;i<maxline;i++) { int key=(b[i]+a[i])%10; a[i+1]=a[i+1]+(a[i]+b[i])/10; a[i]=key; } if(a[maxline]==0) { maxline--; } /*输出之前把数组倒回来输出*/ printf("Case %d:\n",ll); for(int k=0;k<i;k++) { printf("%d",c[k]); } printf(" + "); for(j=j-1;j>=0;j--) { printf("%d",b[j]); } printf(" = "); for(;maxline>=0;--maxline) { printf("%d",a[maxline]); } printf("\n"); if(t!=0) printf("\n"); ++ll; } } return 0; }
背景:本想水水更健康,没想到被这个大数加法整了两个多小时,太多细节,太多易错;终于知道模拟题有多虐心了,不过越虐,越爽。
学习:1、主要是输出格式的设定,最后一个空格最后一个换行符都不要。
心得:无论多么仔细还是会有失误,特别是在代码变长以后,所以我没写完一个小块都应该检查一下,这比做完了再去检查有很多好处,节省时间一些!