AcWing 791. 高精度加法
原题链接
简单
作者:
BanLi
,
2021-01-24 09:41:18
,
所有人可见
,
阅读 304
新手ac记录
C++ 代码
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int> &sa, vector<int> &sb){
if(sa.size() < sb.size()) //保持在相加时,sa的长度大于sb
add(sb, sa);
vector<int> sc;
int j = 0; //定义进位变量
for(int i = 0; i < sa.size(); i++){
j += sa[i]; //进位变量首先加上sa中的一位
if(i < sb.size()) //如果说正在加第i位,而且sb也有第i位,即没有超出sb的长度,则需要将sb的第i位也进行相加
//相当于没有超出长度短的那个数时,两个数的第i位进行相加
j += sb[i];
sc.push_back(j % 10); //由于相加结果可能超出10,此时需要进位,留在sc 的i位应该是j对10取余
j /= 10; //j除以10得到进位,十进制下,j要不为0,要不为1,进位不可能出现2
}
if(j) //十进制下,j要不为0,要不为1, j为1时,便是最高位还有进位,需要在加个1到sc中
sc.push_back(j);
return sc;
}
int main(){
string a, b;
vector<int> sa, sb;
cin >> a >> b; //输入的数为高位在左,低位在右
for(int i = a.size() - 1; i >= 0; i--) //首先将输入数转化为低位在i=0处,方便相加
sa.push_back(a[i] - '0');
for(int i = b.size() - 1; i >= 0; i--)
sb.push_back(b[i] - '0');
auto sc = add(sa, sb);
for(int i = sc.size() - 1; i >= 0; i--) //逆序输出,高位先输出
cout << sc[i];
return 0;
}