首页 > 编程语言 > 详细

高精度算法—加法篇

时间:2020-03-19 22:26:43      阅读:45      评论:0      收藏:0      [点我收藏+]

同理参照高精度算法-减法篇,一个模板改过来的

解决跟高精度减法不同的问题:

①0与0相加的情况

1 if (s1[0] ==0 && s2[0] == 0)
2         return ss += "0";

 

②没有前导零的存在,但是可能会出现位数增多的情况

比如:9999+9999=19998

int tmp = 0;//与高精度减法不同,这里tmp不再为1,而是为0 解决例如999+1=1000,位数增多且其他位数都为0的情况
    while (ans[tmp] == 0)
        tmp++;

 

终极代码

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 using namespace std;
 5 int arr1[200000], arr2[200000], ans[200000];
 6 string jiafa(string s1, string s2)
 7 {
 8     string ss;
 9     if (s1[0] ==0 && s2[0] == 0)
10         return ss += "0";
11     if (s1.length() < s2.length() || (s1.length() == s2.length() && s1 < s2))
12     {
13         return jiafa(s2, s1);
14     }
15     for (int i = 1; i <= s1.length(); i++)
16         arr1[i] = s1[i - 1] - 0;
17     for (int i = 1; i <= s2.length(); i++)
18         arr2[i + s1.length() - s2.length()] = s2[i - 1] - 0;//这里是为了解决长度大的数减去长度小的数 例如89999-9
19     for (int i = s1.length(); i > 0; i--)
20         ans[i] = arr1[i] + arr2[i];
21     for (int i = s1.length(); i > 0; i--)
22     {
23         if (ans[i]>=10)
24         {
25             ans[i]-=10;
26             ans[i - 1]++;
27         }
28     }
29     int tmp = 0;
30     while (ans[tmp] == 0)
31         tmp++;
32     for (int i = tmp; i <= max(s1.length(), s2.length()); i++)
33         ss += ans[i] + 0;
34     return ss;
35 }
36 int main()
37 {
38     string s1, s2;
39     cin >> s1 >> s2;
40     cout << jiafa(s1, s2);
41 }

 

高精度算法—加法篇

原文:https://www.cnblogs.com/luoyoooo/p/12527566.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!