题解-洛谷P1601 A+B Problem(高精)

https://www.luogu.org/problemnew/show/P1601(题目传送)

显然数据范围超过了long long类型,故不能简单的用两个长整型存起来相加。这里用到大数据的高精度算法(加法)。

所谓高精度算法,就是先用字符串将输入存下,并把字符串倒序(方便之后处理)转换成数组,并依据小学竖式的算法思想,逐位处理计算结果(而这里高精度加法的核心就是进位)。

上代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int a[502],b[502],c[502];
 6 int main()
 7 {
 8     char s1[501],s2[501];
 9     cin>>s1>>s2;
10     for(int i=strlen(s1)-1;i>=0;i--)
11         a[strlen(s1)-i]=s1[i]-'0';
12     for(int i=strlen(s2)-1;i>=0;i--)
13         b[strlen(s2)-i]=s2[i]-'0';
14     int i=1;
15     while(i<=strlen(s1)||i<=strlen(s2))
16     {
17         c[i]+=a[i]+b[i];
18         if(c[i]>=10)
19         {
20             c[i+1]++;
21             c[i]%=10;
22         }
23         i++;
24     }
25     while(!c[i]&&i>1) i--;
26     for(;i>=1;i--)
27     cout<<c[i];
28     return 0;
29 } 

最后几点提醒:

1.储存结果的数组c中开头的0不输出;若c中全是零,即两数之和为0,就只保留最后一位0输出。

2.若输入的数据中有负数,就要进行特判,并视情况转化为相应的高精度减法计算。

3.输出判断时应从两个加数最高位+1开始(防止加数最高位有进位但被忽略)。

猜你喜欢

转载自www.cnblogs.com/InductiveSorting-QYF/p/10464393.html