c++_高精度加法 重要!!!

我们先来看题

题目描述
求两个不超过200位的非负整数的和。


输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。


输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。


样例输入1         复制
22222222222222222222
33333333333333333333

样例输出1         复制
55555555555555555555

重试

复制

这个问题可以通过将两个大整数从最低位开始逐位相加,并将进位加到下一位来解决。下面是解决这个问题的一般步骤:

  1. 创建两个字符串来存储两个大整数,并从输入中读取这两个字符串。
  2. 创建一个字符串来存储相加的结果。
  3. 创建两个指针,分别指向两个大整数的最低位。
  4. 创建一个变量来存储进位的值,初始值为0。
  5. 从最低位开始,逐位相加两个大整数,并将进位加到下一位。
  6. 如果一个大整数的位数比另一个大整数多,将多出的位数加到结果中。
  7. 如果最高位的进位不为0,将进位加到结果的最高位。
  8. 反转结果字符串,去除多余的前导0,并输出结果。

这是一个大整数相加的一般解决方案。

有了思路我们开始写code

#include<bits/stdc++.h>
using namespace std;

string a, b; // 用于存储输入的两个大整数
int num1[10010], num2[10010], len, res[10010], jw = 0; // num1, num2 用于存储两个大整数的每一位数字,res 用于存储相加的结果,jw 用于存储进位

int main() {
    // 读取两个大整数
    cin >> a >> b;

    // 计算两个大整数的最大长度
    len = max(a.size(), b.size());

    // 将大整数的每一位数字存储到数组中,个位存储在数组的最低位
    for (int i = 0; i < a.size(); i++) {
        num1[i] = a[a.size() - 1 - i] - '0';
    }
    for (int i = 0; i < b.size(); i++) {
        num2[i] = b[b.size() - 1 - i] - '0';
    }

    // 逐位相加两个大整数
    for (int i = 0; i < len; i++) {
        int ans = num1[i] + num2[i] + jw; // 当前位相加结果
        jw = ans / 10; // 计算进位
        res[i] = ans % 10; // 当前位的结果
    }

    // 处理最高位的进位
    if (jw > 0) {
        res[len] = jw; // 将进位加到结果中
        len++;
    }

    // 输出相加的结果
    for (int i = len - 1; i >= 0; i--) {
        cout << res[i];
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值