AcWing 791. 高精度加法
原题链接
简单
//791:高精度加法 该算法用来算:数组表示的A+B
#include<iostream>
#include<vector> // 包含动态数组的 vector 库 vector自带size 表示长度
//vector来表示大整数,
using namespace std;
//const int N=1e6 +10; // 定义常量整数 N,值为 1000000 加上 10
//C=A+B //vector<int> &A:用数组表示的大整数A
vector<int> add(vector<int> &A,vector<int> &B){//加上&,会提高速率,不用拷贝
vector<int> C; // 初始化一个空向量 C,用于存储结果
int t=0; //存储进位
for(int i=0;i<A.size()||i<B.size();i++){ // 循环遍历两个数字的每一位
if(i<A.size()) t+=A[i];// 如果 A 中的位存在,则将其加到 t 中
if(i<B.size()) t+=B[i]; //此时t就变成Ai+Bi+t
C.push_back(t%10); // 如果t大于10,当前这一位就保留t的余数 将 t 的个位数存储到向量 C 中
t/=10;// 更新进位,准备下一次迭代
}
if(t) C.push_back(1); // 如果循环结束后还有进位,则将其加到结果中
return C; // 返回相加结果向量 C
}
int main(){
string a,b;//声明两个字符串变量,用于存储输入的数字
vector<int> A,B;// 声明两个向量,用于存储输入数字的每一位
cin>>a>>b; //a="123456"
for(int i=a.size()-1;i>=0;i--)//逆序
A.push_back(a[i]-'0'); //A=[6,5,4,3,2,1]
// 将字符串 a 转换为整数向量 A
for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
auto C=add(A,B); //auto:让编译器自己推断是哪个类型 相当于vector<int>
for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
// 以 逆序 打印结果向量 C 中的每一位 先输出最高位
return 0;
}