AcWing 791. 高精度加法 解题记录

Posted itdef

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 791. 高精度加法 解题记录相关的知识,希望对你有一定的参考价值。

题目地址 https://www.acwing.com/problem/content/description/793/

题目描述
给定两个正整数,计算它们的和。

输入格式
共两行,每行包含一个整数。

输出格式
共一行,包含所求的和。

算法
很明显 输入会超过64位 也就是即使long long 类型也不能进行常规加法
那么输入就是用string 接收字符串 来模拟加法

加法主要是三个数字的相加 数字a 数字b 以及进位
所以 int sum = (a - ‘0‘) + (b - ‘0‘) + next;
然后得到除开进位后本地应该显示的数字 int local = sum % 10;
计算进位 next = sum / 10;
由于加法是从最小位开始的 所以字符串做了逆转

reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
还要考虑数字a 和数字b 位数不同的情况

while (i < a.size() && i < b.size()) {
add(a[i], b[i], next);
i++;
}

while (i < a.size()) {
add(a[i], ‘0‘, next);
i++;
}

while (i < b.size()) {
add(‘0‘, b[i], next);
i++;
}
还有一种特殊情况,最后一位还要进位
也就是最后的和 比最大的数还要多一位1 记得最后判断下

if (next == 1)
v.push_back(1);
最后显示记录结果 记得也要做逆转

reverse(v.begin(), v.end());
for (int i = 0; i < v.size(); i++)
{
cout << v[i];
}

技术图片
 1 #include <iostream>
 2 #include <string>
 3 #include <algorithm>
 4 #include <vector>
 5 
 6 
 7 using namespace std;
 8 
 9 string a,b;
10 vector<int> v;
11 
12 void add(int a,int b,int& next)
13 {
14     int sum = (a - 0) + (b - 0) + next;
15     int local = sum % 10;
16     v.push_back(local);
17     next = sum / 10;
18 }
19 
20 int main()
21 {
22     cin >> a >> b;
23 
24     reverse(a.begin(),a.end());
25     reverse(b.begin(), b.end());
26 
27     int i = 0; int next = 0;
28     while (i < a.size() && i < b.size()) {
29         add(a[i],b[i],next);
30         i++;
31     }
32 
33     while (i < a.size()) {
34         add(a[i],0,next);
35         i++;
36     }
37 
38     while (i < b.size()) {
39         add(0,b[i],next);
40         i++;
41     }
42     if (next == 1)
43         v.push_back(1);
44     reverse(v.begin(), v.end());
45     for (int i = 0; i < v.size(); i++)
46     {
47         cout << v[i];
48     }
49 
50 
51     return 0;
52 
53 }
54 
55 
56 作者:defddr
57 链接:https://www.acwing.com/solution/AcWing/content/2074/
58 来源:AcWing
59 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Code

 

以上是关于AcWing 791. 高精度加法 解题记录的主要内容,如果未能解决你的问题,请参考以下文章

算法AcWing 791. 高精度加法

AcWing基础算法课Level-2 第一讲 基础算法

AcWing 803. 区间合并

AcWing 795. 前缀和

AcWing 799. 最长连续不重复子序列

AcWing 801. 二进制中1的个数