1303.A+B(高精度)
Description
求A+B
多组测试样例。两个正整数X,Y(0≤X,Y≤10^100)
输出结果
1 1
12345 54321
Sample Output
2
66666
题目已经说的很清楚是高精度了.......
下面代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char ads[105];
char s1[105],s2[105];
int additive(char* a,char* b)
{
memset(ads,0,sizeof(ads));
int len,len1,len2;
int i;
int ad[105];
len1=strlen(a);
len2=strlen(b);
if(len1==len2)
{
len=len1;
}
else if(len1>len2)
{
len=len1;
for(i=len;i>=len-len2;i--)
{
b[i]=b[i-len+len2];
}
for(i=len-len2-1;i>=0;i--)
{
b[i]='0';
}
}
else if(len1<len2)
{
len=len2;
for(i=len;i>=len-len1;i--)
{
a[i]=a[i-len+len1];
}
for(i=len-len1-1;i>=0;i--)
{
a[i]='0';
}
}
int t=0;
for(i=len-1;i>=0;i--)
{
ad[i]=(a[i]-'0')+(b[i]-'0')+t;
t=0;
if(ad[i]>=10)
{
t++;
ad[i]=ad[i]-10;
ads[i]=ad[i]+'0';
}
else
{
ads[i]=ad[i]+'0';
}
}
if(t==1)
{
for(i=len;i>=0;i--)
{
ads[i]=ads[i-1];
}
ads[0]='1';
}
return 0;
}
int main()
{
while(scanf("%s",s1)!=EOF)
{
scanf("%s",s2);
additive(s1,s2);
cout<<ads<<endl;
}
return 0;
}