好笨好笨,做这道题用了好长时间,结果还是没有做出来。。。。
果然是菜鸟啊,刚刷OJ就被完败了。。思路不全面,还需要历练呀
#include<iostream>
#include<string> //代码是xuezhongfenfei的,转载来用用
using namespace std;
int main()
{
int n,m,t,s,i,j,k,p,c[1005];
char a[1005],b[1005];
cin>>n;
for(p=1;p<=n;p++)
{
if(p!=1)
cout<<endl cin="">>a>>b;
cout<<"Case "<<p<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
m=strlen(a);
t=strlen(b);
if(m>t)
s=m;
else
s=t;
for(i=0;i<m;i++)
a[i]=a[i]-'0'; //这是自己第一点解决不了的问题,对ASCII不熟悉。
for(i=0;i<t;i++) //这里面还有一个问题就是char的存储问题,几次试验下来输出都是乱码,头疼了一会
b[i]=b[i]-'0';
for(i=0;i<=s;i++)
c[i]=0;
i=m-1;j=t-1;k=s;
for(;(i>=0)&&(j>=0);k--)
{
if(c[k]+a[i]+b[j]<=9) //对于进制这点自己用了另外一种不怎么美观的方法,N个if()else过去
c[k]+=a[i]+b[j]; //虽然也解决了问题,但代码量不仅大了,也不优雅
else
{
c[k]=(c[k]+a[i]+b[j])%10;
c[k-1]++;
}
i--;
j--;
}
while(i>=0)
{
if(c[k]+a[i]>9)
{c[k]=(c[k]+a[i])%10;c[k-1]++;}
else
c[k]=c[k]+a[i];
k--;i--;
}
while(j>=0)
{
if(c[k]+b[j]>9)
{c[k]=(c[k]+b[j])%10;c[k-1]++;}
else
c[k]=c[k]+b[j];
k--;j--;
}
if(c[0]!=0)
cout<<"1";
for(i=1;i<=s;i++)
cout<<c[i];
cout<<endl;
}
return 0;
}
</endl></string></iostream>
果然是菜鸟啊,刚刷OJ就被完败了。。思路不全面,还需要历练呀