高精度加法
描述
给定两个正数计算他们的和
1 <= 整数长度 <= 100000
思路
- 使用vector存数数据,可以调用size()方法直接获取数字长度
- 将数字一个一个拆分开来并逆序放入vector中
例如:1234567
放入vector:[7,6,5,4,3,2,1]
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int> &A, vector<int> &B){
vector<int> C;
int t = 0; //设t为进位符号,且用t来表示每两位数的和。
for(int i = 0; i < A.size() || i < B.size(); i ++){
if(i <= A.size()) t += A[i];
if(i <= B.size()) t += B[i];
C.push_back(t % 10); //这里一定要注意取余数
t /= 10; //是否要进1
}
if(t) C.push_back(1); //如果最高位相加之后还要进1
return C;
}
int main(){
string a,b;
vector<int> A, B;
cin >> 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');
auto res = add(A,B); //根据变量初始值的类型自动选择匹配的类型
for(int i = res.size() - 1; i >= 0; i --) printf("%d",res[i]);
return 0;
}