将比较大的数放进数组中储存,从而实现高精位加法
具体的代码实现如下
#include<iostream>
#include<vector>
using namespace std;
///C=A+B
vector<int> add(vector<int> &A, vector<int> &B) //加上引用是为了提高效率, 就不需要拷贝整个数组了
{
vector<int> C;
int t = 0;
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];
// 此时的t是A[i]+B[i]+ (前一位A[i-1]和B[i-1]是否有进位,有就+1,无则0)
C.push_back(t % 10); //最终位数上的数是和的个数
t /= 10; //用于进位,若大于10则进,否则不进
}
if (t) { //如果最高位有进位, 那么添上1
C.push_back(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');//减去'0'表示这个数字的值
auto C = add(A, B); //auto 自动识别可以C的类型
for (int i = C.size() - 1; i >= 0; i--) cout << C[i];
//因为是倒着存的, 要倒着输出
return 0;
}