两个超大整数的相加问题

大整数相加问题,最核心的问题就是怎样处理每位数的相加以及进位的处理问题。

另外一点就是,大整数如何存储能够使得,两数相加时,更加容易处理。

此代码中,给出的思想就是,首先用字符串类型接收两个大整数,具体存储每位数用vector存储,此时要注意,为了计算方便,存放在vector中时,按照由低位到高位存储,为了方便处理进位问题。

在进行按位相加时,要理清楚相加操作时,进位的更新以及要注意,在最后相加完成后,仍有进位时,需要继续处理。

#include<iostream>
#include<string>
#include<vector>

using namespace std;

vector<int> add(vector<int> &a,vector<int> &b){
    vector<int> C;//结果存放
    int t = 0;//进位
    int i = 0;
    while(i<a.size() || i<b.size()){
        if(i<a.size()) t += a[i];
        if(i<b.size()) t += b[i];
        
        C.push_back(t%10);
        t = t/10;
        i++;
    }
    //如果最后仍有进位,继续处理
    if(t) C.push_back(1);
    return C;
}

int main(){
    //两个超大整数,超出了所给类型的范围,需要将数组存放在数组中
    //首先需要接受两个超大数组,用字符串类型接收,接着进行按位存放
    string a,b;
    cin>>a>>b;
    
    vector<int> A;
    vector<int> B;
    
    //为了计算方便,此时存放在数组时,按照由低位到高位进行存储
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i] - 0);
    for(int i=a.size()-1;i>=0;i--) B.push_back(b[i] - 0);

    //两大整数存储完成后,此时就需要进行相加操作
    vector<int> res  = add(A,B);
    
    //得到结果后,输出结果数组中的结果
    for(int i=res.size()-1;i>=0;i--){
        cout<<res[i];
    }
    return 0;
}
经验分享 程序员 微信小程序 职场和发展