模板题 大数相加: 791. 高精度加法 - AcWing题库
无语了,函数名没写,调试进不去函数半天我竟然看不见:
#include<iostream>
#include<vector>
using namespace std;
const int N = 1e6+10;
//c=a+b
vector<int> sum(vector<int>& a,vector<int>&b)//引用是为了提高效率,尽可能不调用拷贝构造
{
vector<int> c;//vector存储我们的和
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];
// 98765
// + 54321
// ____________
//这个时候t里面即有了a,b的和还有进位的值
c.push_back(t%10);//留下个位数
t/=10; //比如个位数 5+1=6 6/10=0,说明不用进位 如果9+9=18,18/10=1,说明需要进1位
}
if(t) //循环都结束了,t还等于1,那就再往前进1,例如 99+11=110
c.push_back(1);
return c;
}
int main()
{
string a,b; //a和b是大数,用string存一下
cin>>a>>b;
vector<int> v1;
vector<int> v2;
//假如a是 '12345' b是'56789'
//倒着遍历 '1234567'
for(int i=a.size()-1;i>=0;i--) //54321
{
v1.push_back(a[i]-'0');
}
//倒着遍历 '56789'
for(int i=b.size()-1;i>=0;i--) //98765
{
v2.push_back(b[i]-'0');
}
vector<int> c=sum(v1,v2);
//打印 这个就按照我们日常习惯,从前往后打印即可
for(int i=c.size()-1;i>=0;i--)
{
printf("%d",c[i]);
}
return 0;
}