BM86 大数加法 C++ 详细注释

本文介绍了一个C++程序,通过字符串操作实现两个整数的逐位相加,适用于不同位数的情况。主要展示了如何处理进位和结果存储的过程。通过实例演示了如何使用solve函数解决'1'与'99'、'12345'与'99'以及'114514'与空字符串的相加问题。
摘要由CSDN通过智能技术生成

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

#include <iostream>
#include <algorithm>

using namespace std;

string solve(string s, string t) {
    if (s.empty() && t.empty())
        return 0;
    if (s.empty())
        return t;
    if (t.empty())
        return s;
    int num1, num2, sum, carry = 0;
    string ans;
    // 默认s的位数较多
    if (s.size() < t.size())
        swap(s, t);
    // 从两个数的最后一位开始
    int i = s.size() - 1, j = t.size() - 1;
    for (; i >= 0 && j >= 0; --i, --j) {
        num1 = s[i] - '0';              // 将数字字符转为整数
        num2 = t[j] - '0';
        sum = num1 + num2 + carry;      // 对应位求和
        carry = sum > 9 ? 1 : 0;        // 进位
        ans += (sum % 10) + '0';        // 存入结果
    }
    // 存在剩余位数和进位
    while (i >= 0 || carry) {
        // 存在剩余位数,当前位等于s[i]+carry,不存在剩余位数,当前位等于carry
        sum = (i >= 0) ? (s[i] - '0' + carry) : carry;
        carry = sum > 9 ? 1 : 0;    // 新的进位
        ans += (sum % 10) + '0';    // 存入结果
        i--;
    }
    // 反转结果字符串
    reverse(ans.begin(), ans.end());
    return ans;
}

int main() {
    std::cout << solve("1", "99") << std::endl;
    std::cout << solve("12345", "99") << std::endl;
    std::cout << solve("114514", "") << std::endl;
    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值