AcWing 791. 高精度加法
原题链接
简单
作者:
test_w
,
2024-11-29 14:31:20
,
所有人可见
,
阅读 2
题目描述
细节部分在注释中有体现.
算法1
C++ 代码
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B) //这里用取址符是为了使效率更高,不用再copy一份过来.
{
vector<int> C;
int t=0;//用于记录进位.
for (int i=0;i<A.size() || i<B.size();++i)
{
if (i<A.size()) t+=A[i];//保证A数组中的第i位有数
if (i<B.size()) t+=B[i];//保证B数组中的第i位有数
C.push_back(t%10);
t/=10;
}
if (t) C.push_back(1);//当A数组长度与B数组长度一致时最后一位加完后如果有进位,则还需要加上
return C;
}
int main()
{
string a,b;//由于这个数据是比较大的不能用long long来输入,只好用字符串来存储.
cin >> a >> b;
vector<int> A,B;//a数组用于存储a数据的每一位,并且是倒序存放的.
//向A,B中存入每个位数
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);//auto就是让编译器自己去定义类型,等价于vector<int> C
for (int i=C.size()-1;i>=0;--i) printf("%d",C[i]);
return 0;
}