本题非常非常的数有可能非常大,用常规的高精度无法解决,应用字符类型高精度来解决
Description
求A+B
Input
多组测试样例。两个正整数X,Y(0≤X,Y≤10^100)
Output
输出结果
Sample Input
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)
//短的数字位不足。将数字往后移,前面补“0”,便于计算
{
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)
//短的数字位不足。将数字往后移,前面补“0”,便于计算
{
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;
//把原本该有的数加上,再加上前一位需要进的“1”
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;
}
转载于:https://www.cnblogs.com/RootVount/p/10356761.html
相关资源:C 高精度A B代码