AcWing 791. 高精度加法
原题链接
简单
作者:
现代修士o_O
,
2021-04-20 19:55:41
,
所有人可见
,
阅读 241
#include <iostream>
#include <vector>
using namespace std;
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];
C.push_back(t % 10); // 加上除去进位 不能用C[i] = t % 10 初始化,好像
t /= 10; //更新进位
}
if (t) C.push_back(1); //还有进位, 直接在高位补上一个1
return C;
}
int main()
{
string a, b;//a = "12345" b = "23456" //字符串是数字高位放在了数组低位的
vector<int> A, B;
cin >> a >> b;
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0'); //A = [5, 4, 3, 2, 1] 低位放低位,高位好进位
for (int i = b.size() - 1; i >= 0; i -- ) B.push_back(b[i] - '0');// B = [6, 5, 4, 3, 2] 地位放高位,时间要落泪
auto C = add(A, B);//高精度加法
for (int i = C.size() - 1; i >= 0; i -- ) printf("%d",C[i]); //从高位往低位不断输出
return 0;
}