算法很简单,完全字符串处理
#include<iostream>
using namespace std;
void solve(char* ,char*, char *);
int main()
{
//freopen("1.txt","r",stdin);
char a[1001],b[1001],c[1001];
int t,casen=1;
cin>>t;
while(casen<=t)
{
memset(a,'0',sizeof(a));
memset(b,'0',sizeof(b));
memset(c,'0',sizeof(c));
cin>>a>>b;
cout<<"Case "<<casen<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
solve(a,b,c);
cout<<c<<endl;
if(casen==t);
else
cout<<endl;
casen++;
}
return 0;
}
void solve(char* a,char *b,char *c)//字符串a,b为加数,c为结果
{
int i;
int lena=strlen(a);
int lenb=strlen(b);
for(i=0;i<lena/2;i++)
{
char temp=*(a+i);
*(a+i)=*(a+lena-1-i);
*(a+lena-1-i)=temp;
}
a[lena]='0';
for(i=0;i<lenb/2;i++)
{
char temp=*(b+i);
*(b+i)=*(b+lenb-1-i);
*(b+lenb-1-i)=temp;
}
b[lenb]='0';
int pos=0;
for(i=0;i<((lena>lenb)?lena:lenb);i++)
{
int xx=a[i]-'0'+b[i]-'0'+pos;
if(xx>=10)
{
c[i]=xx%10+'0';
pos=xx/10;
}
else
{
c[i]=xx+'0';
pos=0;
}
}
if(pos!=0)
{
c[i]=pos+'0';
c[i+1]='/0';
}
else
c[i]='/0';
int lenc=strlen(c);
for(i=0;i<lenc/2;i++)
{
char temp=*(c+i);
*(c+i)=*(c+lenc-1-i);
*(c+lenc-1-i)=temp;
}
c[lenc]='/0';
}