[模板题]高精度加法 原创

来源:模板题

算法标签:高精度

题目描述:

给定两个正整数,计算它们的和。

输入格式
共两行,每行包含一个整数。

输出格式
共一行,包含所求的和。

数据范围
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;
}
posted @ 2022-02-02 18:00  俺叫西西弗斯  阅读(0)  评论(0)    收藏  举报  来源