通过的代码:
#include <iostream> #include <string> #include <stdlib.h> #define max 1002 int f[max]; int g[max]; int x[max]; int y[max]; char str1[max]; char str2[max]; using namespace std; int main() { int i,j,t,m,n,k,p,r=1; cin>>t; while(t--) { memset(g,0,sizeof(g)); //初始化整数数组 memset(f,0,sizeof(f)); memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); cin>>str1;cin>>str2; m=strlen(str1); n=strlen(str2); for(i=1;i<=m;i++) f[i]=str1[i-1]-'0'; for(i=1;i<=n;i++) g[i]=str2[i-1]-'0'; k=(m>n)?m:n; if(k==m) {for(i=1;i<=k;i++) x[i]=f[i];for(i=1;i<=k;i++) y[i]=g[i];} //此处就是向x[i]数组存入最长的那个整数 else {for(i=1;i<=k;i++) x[i]=g[i];for(i=1;i<=k;i++) y[i]=f[i];} p=(m<n)?m:n; int c=0; for(i=k,j=p;j>0;j--,i--) { int s=x[i]+y[j]+c; x[i]=s%10; c=s/10; } while(c) { if(x[i]==9) { x[i]=0; c=1; i--; } else { x[i]++; c=0; } } cout<<"Case"<<' '<<r<<':'<<endl; for(i=1;i<=m;i++) cout<<f[i]; cout<<' '<<'+'<<' '; for(i=1;i<=n;i++) cout<<g[i]; cout<<' '<<'='<<' '; i=0; while(!x[i])i++; for(;i<=k;i++) cout<<x[i]; r++; cout<<endl; if(t) cout<<endl; //避免结果最后一行多输出一个换行 } system("pause"); return 0; } 经验:
1、 经常要用到字符串输入,可以strlen()计算出输入的元素个数,再可以f[i]=str1[i]-'0';转化成整数,同时也知道了这个整数有多少位;
2、 最好都要对申明的数组初始化,如:memset(g,0,sizeof(g));
3、 要注意输出格式问题,当多组结果之间要多输出一个换行时,要注意最后一组结果输出时就不要多输出一个换行如加上if(t) cout<<endl;就可避免此问题发生
4、 有事看别人通过的代码,可以检查出自己的格式是否考虑周全
作者:qingdu007 发表于2013-3-1 23:49:26 原文链接
阅读:95 评论:0 查看评论