C++实现高精度加法。保姆式教学。

思路

我们只需要普通地模拟数字的加法就可以了。

例子

18 + 34 = 52

第一步

读取数字,将数字用vector存储起来。

第二步

模拟加法的时候我们是从数字尾部开始模拟的,所以为了方便我们可以先将vector反转。

第三步

从初始位置开始相加,也就是4 + 8 = 12

第四步

当前位置的数字则是12 % 10 = 2

第五步

进位:12 / 10 = 1

第六步

指针前移,继续第三步,只不过要再加上上一步的进位。
也就是1 + 1 + 3 = 5

第七步

由于一开始我们是翻转之后计算的,所以结尾要翻转计算出来的答案,25 -> 52

完整代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> add(vector<int> v1, vector<int> v2){
    
    
    vector<int> res;
    int cur = 0;//记录进位
    for(int i = 0; i < v1.size() || i < v2.size(); i++){
    
    
        if(i < v1.size()) cur += v1[i];
        if(i < v2.size()) cur += v2[i];
        res.push_back(cur % 10);//计算当前位置的值
        cur /= 10;//计算进位
    }
    // 看最后有没有进位
    if(cur) res.push_back(cur);
    // 去掉前缀0
    while(res.back() == 0 && res.size() > 1) res.pop_back();
    return res;
}

int main(){
    
    
    string s1, s2;//对应数字用字符串读取
    cin >> s1 >> s2;
    vector<int> v1, v2;
    //将对应字符串存储到vector里面,并且进行翻转。
    for(int i = s1.size() - 1; i >= 0; i--) v1.push_back(s1[i] - '0');
    for(int i = s2.size() - 1; i >= 0; i--) v2.push_back(s2[i] - '0');
    vector<int> ans = add(v1, v2);
    //反着输出,等价于翻转
    for(int i = ans.size() - 1; i >= 0; i--) {
    
    
        cout << ans[i];
    }
    return 0;
}

最后

我们下一篇文章来讲讲高精度减法的具体实现:D
C++实现高精度减法。保姆式教学。

猜你喜欢

转载自blog.csdn.net/qq_52855744/article/details/123615714
今日推荐