题目链接:高精度加法
给定两个正整数(不含前导 0),计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤100000
输入样例:
12
23
输出样例:
35
解题思路:
通过使用字符串输入数据,并将数据存入数组当中。
存储时使用倒序存储,即数组从左到右存储的依次是字符串中从小到大的位数,从个位开始存储。
这样做是为了在发生进位时,只需要在数组进行尾插,无需因头插而移动整个数组,无需考虑因此而浪费时间的问题。
注意:时刻注意进位,在通过数组长度完成加法操作并存储后,观察进位标志是否为1,如果是,则在目标数组后插入1,完成进位操作 。
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int> &v1,vector<int> &v2)
{
vector<int> A;
int num=0;//进位标志
for(int i=0;i<v1.size()||i<v2.size();i++)
{
if(i<v1.size()) num+=v1[i];
if(i<v2.size()) num+=v2[i];
A.push_back(num%10);//只取个位数
num/=10;//若进位,则用于下一次的加法操作
}
if(num) A.push_back(1);
return A;
}
int main()
{
vector<int> v1,v2;
string a,b;//123456 234567
cin>>a>>b;
//a[i]-'0'将字符型数字转为整型数字
for(int i=a.size()-1;i>=0;i--) v1.push_back(a[i]-'0');//654321
for(int i=b.size()-1;i>=0;i--) v2.push_back(b[i]-'0');//765432
auto c=add(v1,v2);
for(int i=c.size()-1;i>=0;i--)
{
cout<<c[i];
}
cout<<endl;
return 0;
}