[模板题]高精度加法 原创
来源:模板题
算法标签:高精度
题目描述:
给定两个正整数,计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤100000
输入样例:
12
23
输出样例:
35
注意
len(a)<=10^6
len(b)<=10^6
思路
1.字符串存储A,B
2.逆序读写,模仿手动加法运算
3.t为进位,t+a[i]+b[i],即添加ab同列同位的两个数字,只增加%10,t/=10计算进位数目
4.完成,反序输出
模仿进程
模仿以下进程:
1.
12
23
5
3
35
2.
39
47
16
7
86
3.
a[3]a[2]a[1]
b[2]b[1]
代码
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B)
{
if(A.size()<B.size())return add(B,A);//把长的那一部分置换为A,方便下面的计算
int t=0;//t进位
vector<int>C;//c ab和
for(int i=0;i<A.size();i++)//只要没走完长的部分
{
t+=A[i];//t加a位的数字
if(i<B.size())t+=B[i];//b还有数 +b[i]
C.push_back(t%10);//返回到C
t/=10;//进位
}
if(t)C.push_back(t);//如果还有余数,则加在最高位
return C;//返回
}
int main()
{
string a,b;
cin>>a>>b;
vector<int>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');
vector<int>C = add(A,B);//c是a+b
for(int i=C.size()-1;i>=0;i--)cout<<C[i];//逆序输出
return 0;
}

浙公网安备 33010602011771号