[AcWing]791. 高精度加法(C++实现)模板题
1. 题目
2. 读题(需要重点注意的东西)
思路:模拟了人工求和的方法。
3. 解法
---------------------------------------------------解法---------------------------------------------------
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int> A,vector<int> B){
// 如果B长度大于A,调换一下,便于下面的for运算不需要进行条件判断
if(A.size() < B.size()) return add(B,A);
vector<int> C;
// 定义进位
int t = 0;
// 开始进行位加
for(int i = 0;i < A.size();i++){
t += A[i]; // A对应的数加到t上
if(i < B.size()) t += B[i]; // B对应的数加到t上
C.push_back(t % 10); // 结果取余作为求和结果
t /= 10; // 新的进位存放在t中用于下一次运算
}
if(t) C.push_back(t); // 如果运行完后还有t,直接存放在数组尾部
return C;
}
int main(){
// 输入两个数,数据结构为字符串,便于作位运算
string a,b;
// 定义两个动态数组vector A,B
vector<int> A,B;
cin >> a >> b;
// 将这两个数倒序存放在A,B数组中,便于进位
for(int i = a.size() - 1;i >= 0; i --) A.push_back(a[i] - '0');
for(int i = b.size() - 1;i >= 0; i --) B.push_back(b[i] - '0');
// 核心--add
auto C = add(A,B);
// 倒序输出C数组,完成解题
for(int i = C.size()-1;i >= 0;i--) cout << C[i];
cout << endl;
return 0;
}
注意:字符char '1','2','3','4','5'....转换成int要减'0'
即上文中的 a[i] - '0'; 与 b[i] - '0';
auto 指让 C 自己根据add(A,B)的返回值设置数据类型。auto C = add(A,B)等效于 vector<int> C = add(A,B);
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
6. 总结
高精度求和模板,推荐完全背下来