社区讨论

60分,求助

P1601高精度加法参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m4e1gh8c
此快照首次捕获于
2024/12/07 18:35
去年
此快照最后确认于
2025/11/04 13:11
4 个月前
查看原帖
CPP
#include <iostream>
#include <cstring>
using namespace std;

char a[505] = {'0'}, b[505] = {'0'};
char c[506] = {'0'}; // 增加一个字符空间用于可能的进位

int main() {
    cin >> a >> b;
    int alen = strlen(a);
    int blen = strlen(b);
    bool jw = false; // 进位标志
    int tmpa, tmpb, sum;

    // 从后往前逐位相加
    for (int i = max(alen, blen) - 1; i >= 0; i--) {
        tmpa = (i < alen) ? a[i] - '0' : 0; // 如果a的当前位不存在,则补0
        tmpb = (i < blen) ? b[i] - '0' : 0; // 如果b的当前位不存在,则补0

        sum = tmpa + tmpb + jw; // 当前位的和
        c[i + 1] = sum % 10 + '0'; // 存储当前位的个位数
        jw = sum >= 10; // 更新进位标志
    }

    // 处理最高位的进位
    c[0] = jw ? '1' : '0';

    // 输出结果,跳过前导0
    int startIndex = c[0] == '0' ? 1 : 0;
    for (int i = startIndex; i <= max(alen, blen); i++) {
        cout << c[i];
    }

    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...