题目描述
给定两个正整数,计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤100000
输入样例:
12
23
输出样例:
35
算法:高精度
参考文献
y总视频
C++ 代码
#include <iostream>
//我们用vector来对大整数进行存储
#include <vector>
using namespace std;
const int N = 1e6 + 10;
//这里参数加上引用是为了快一点,因为如果不加的话,编译器就会把数组重新copy一遍
//这个函数功能就是模拟人工加法的一个过程
vector<int> add(vector<int> &A, vector<int> &B)
{
//答案数组C
vector<int> C;
//变量t是用来存储进位的数值的,一开始没有进位,所以初值0
int t = 0;
//从各位开始进行相加
for (int i = 0; i < A.size() || i < B.size(); i ++ )
{
//当i没有超出范围的时候,t就加上大整数A、B相同位上的数,也就是当前这一位上A或B还有没有值
if (i < A.size()) t += A[i];
if (i < B.size()) t += B[i];
//加完之后t就存储了上一位的进位和A、B相同位上值之和
//对t模10得到当前位上的数,存放进C
C.push_back(t % 10);
//C已经存储了该有的数,那么t此时就要更新,除掉存储的数,得到往下一次要进位的数
t /= 10;
}
//当t还有值的时候,那就直接把t直接添t加进C中
if (t) C.push_back(t);
/*
当然我们略微思考一下也可以发现进位不可能大于1,那么这句就还可以写成这样
if(t) C.push_back(1);
*/
//最后返回答案数组C
return C;
}
int main()
{
//因为大整数太长了,所以我们采用字符串来读取
string a, b;
//存储到vector中
vector<int> A, B;
cin >> a >> b;
//把大整数从低位到高位的每一位存到vector中,因为原来是字符所以需要 -‘0’来转化成数字。
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 C = add(A, B);
//输出结果的时候,我们也是要倒着输出的,因为读取的时候是倒着的,最高位在数组的最后面去了。
for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];
cout << endl;
return 0;
}