[AcWing]791. 高精度加法(C++实现)模板题

1. 题目

在这里插入图片描述

2. 读题(需要重点注意的东西)

思路:模拟了人工求和的方法。

3. 解法

---------------------------------------------------解法---------------------------------------------------

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

vector<int> add(vector<int> A,vector<int> B){
    // 如果B长度大于A,调换一下,便于下面的for运算不需要进行条件判断
    if(A.size() < B.size()) return add(B,A);
    vector<int> C;
    // 定义进位
    int t = 0;
    // 开始进行位加
    for(int i = 0;i < A.size();i++){
        t += A[i]; // A对应的数加到t上
        if(i < B.size()) t += B[i]; // B对应的数加到t上
        C.push_back(t % 10); // 结果取余作为求和结果
        t /= 10; // 新的进位存放在t中用于下一次运算
    }
    if(t) C.push_back(t); // 如果运行完后还有t,直接存放在数组尾部
    return C;
}

int main(){
    // 输入两个数,数据结构为字符串,便于作位运算
    string a,b;
    // 定义两个动态数组vector A,B
    vector<int> A,B;
    cin >> a >> b;
    // 将这两个数倒序存放在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');
    // 核心--add
    auto C = add(A,B);
    // 倒序输出C数组,完成解题
    for(int i = C.size()-1;i >= 0;i--) cout << C[i];
    cout << endl;
    
    return 0;
}
注意:字符char '1','2','3','4','5'....转换成int要减'0'
即上文中的 a[i] - '0'; 与 b[i] - '0';
auto 指让 C 自己根据add(A,B)的返回值设置数据类型。auto C = add(A,B)等效于 vector<int> C = add(A,B);

4. 可能有帮助的前置习题

5. 所用到的数据结构与算法思想

6. 总结

高精度求和模板,推荐完全背下来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloudeeeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值