通过的代码:
#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、 有事看别人通过的代码,可以检查出自己的格式是否考虑周全