高精度加法

给定两个正整数(不含前导 0),计算它们的和。

输入格式

给定两个正整数(不含前导 00),计算它们的和。

输出格式

共一行,包含所求的和。

数据范围

1≤整数长度≤100000


这个算法用来计算大数之间的加法。

例:计算 567+28

  • 用 a, b 两个字符串存储输入。a = 567, b = 28

  • 为了将个位对齐,两个加数需要倒序存放在 AB 两个整数数组中。 A = [7, 6, 5], B = [8, 2]

  • 新建整数数组 C 保存结果,整型变量 t 保存进位,初始 t = 0.

  • 将各个位上的数字相加,求出结果对应位上的数字和进位。

  • 例如对个位计算: A[0] + B[0] = 7 + 8 = 15, 结果个位上是 5, 进位是 1. 所以C[0] = 5, 进位t = 1

  • 最后把结果数组 C 中就保存了计算倒序结果,倒序输出就是答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream>
#include<vector>
using namespace std;

vector<int> add(vector<int>&a,vector<int>&b){
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];
if(i<b.size()) t+=b[i];
c.push_back(t%10);
t/=10;
}
if(t) c.push_back(t);
return c;
}


int main(){
string n,m;
cin>>n>>m;
vector<int> a,b;
for(int i=n.size()-1;i>=0;i--) a.push_back(n[i]-'0');
for(int i=m.size()-1;i>=0;i--) b.push_back(m[i]-'0');
vector<int>c=add(a,b);
for(int i=c.size()-1;i>=0;i--) cout<<c[i];

return 0;
}