一起学习交流~

大整数计算-02-加法

算法 laomuji 11个月前 (11-06) 618次浏览 已收录 0个评论

一、原理

首先来看看加法的位数

9+9=18

99+9=108

99+99=198

也就是说,加法最多多一位数,用数组来处理的话,只需要多一个字节保存即可

比如

987+426

数组1为987,数组2为426

数组3为0000

因为加法先从右边计算,所以要先从数组的右边开始计算,循环到左边

7+6=13,数组3的0000,变为0013

8+2=10,数组3的0013,变为0113

9+4=13,数组3的0113,变为1413

这个比较简单,理解了就很容易写出来,不多赘述了

二、代码

string m_addBigInt(string a, string b)
{
    vector<char>result(a.size()+1,0);
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    int i=0;
    for(i=0;i<b.size();i++){
        char num1 = a[i]-'0';
        char num2 = b[i]-'0';
        char sum = num1+num2+result[i];
        if(sum>9){
            sum-=10;
            result[i+1]+=1;
        }
        result[i]=sum;
    }
    while(i<a.size()){
        char num1 = a[i]-'0';
        char sum = num1+result[i];
        if(sum>9){
            sum-=10;
            result[i+1]+=1;
        }
        result[i]=sum;
        i++;
    }
    reverse(result.begin(),result.end());
    for(i=0;i<result.size();i++){
        result[i]+='0';
    }
    for(i =0;i<(result.size()-1);i++){
        if(result[i]!='0'){
            break;
        }
    }
    string resStr;
    resStr.assign(result.begin()+i,result.end());
    return resStr;
}

string addBigInt(string &a, string &b)
{
    if(a.size()>b.size()){
        return m_addBigInt(a,b);
    }else{
        return m_addBigInt(b,a);
    }
}
喜欢 (0)
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论