Martian Addition
做题别紧张。。。
两个 20进制数相加。每个数不超过100位。(两个数不一定等长)
1, a,b字符数组存储,测出较短的,在高位补 '0' 。
2, 倒序存储,相加的时候有进位方便处理,尤其是最高位还有进位 (正序 把最高位进位单独处理)
3,a,b中的字符转化成 整数相加,结果存入 c数组,>=20 就进位,本位-20。
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[105],b[105];
memset(a,'0',sizeof a);
while( gets(a))
{
char A[105],B[105],D[105];
memset(b,'0',sizeof b);
memset(A,'0',sizeof A);
memset(B,'0',sizeof B);
gets(b);
int c[105]={0};
int la=strlen(a)-1;
int lb=strlen(b)-1;
int laa=la;
int lbb=lb;
for(int i=0;i<=la;i++) A[i]=a[la-i];
for(int i=0;i<=lb;i++) B[i]=b[lb-i];
if(la>lb)
for(int i=lb+1;i<=la+5;i++) B[i]='0';
if(la<lb)
for(int i=la+1;i<=lb+5;i++) A[i]='0';
bool y=0;
int ding=max(la,lb);
int aa=0,bb=0;
for(int i=0;i<=ding;i++)
{
if(A[i]>='0' && A[i]<='9') aa=A[i]-'0';
else if(A[i]>='a' && A[i]<='j') aa=A[i]-'a'+10;
if(B[i]>='0' && B[i]<='9') bb= B[i]-'0';// cout<<"xiix"<<endl;
else if (B[i]>='a' && B[i]<='j')bb=B[i]-'a'+10;//cout<<"haha"<<endl;
// cout<<"aa ÊÇ"<<aa<<endl;
// cout<<"bb ÊÇ"<<bb<<endl;
c[i]+=aa+bb;
if(c[i]>=20)
{
// cout<<"´óÁË"<<endl;
c[i+1]+=1;
c[i]-=20;
if(i==ding)
{y=1;}
}
// cout<<"cccccccc"<<c[i]<<endl;
}
if(y==1)
{
c[ding+1]=1;
ding++;
}
for(int i=ding;i>=0;i--)
{
if(c[i]>=0&& c[i]<=9) D[i]=c[i]+'0';
else if(c[i]>=10 && c[i]<=19 ) D[i]=c[i]-10+'a';
}
// for(int i=0;i<=la;i++)
// cout<<c[i]<<endl;
for(int i=ding;i>=0;i--)
cout<<D[i];
cout<<'\n';
memset(a,'0',sizeof a);
}
return 0;
}