You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++大整数相加输出随机数问题排查与修正求助

20位大整数相加代码错误排查与修正及C字符串处理指导

原代码错误分析

  • 未初始化数组与输入越界处理缺失:输入字符串长度可能不足20,直接循环20次转换字符时,超出字符串长度的部分是未定义的垃圾值,导致n1、n2数组出现随机数。
  • 数字存储顺序错误:输入字符串的第一个字符是最高位,但代码直接按顺序存入数组,相加时从数组末尾(对应原字符串低位后的垃圾值)开始计算,逻辑完全错误。
  • sum数组移位逻辑错误:无进位时的移位操作会导致数组元素覆盖混乱,输出时出现多余无效值。
  • 未实现和超过20位的提示逻辑:原需求要求和超过20位时输出提示,代码未处理该部分。

修正后的代码

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

int main()
{
    int n1[20] = {0}, n2[20] = {0}; // 初始化数组为0,避免垃圾值
    int sum[21] = {0};
    int carry = 0;
    char x1[21], x2[21];
    int len1, len2;

    cout << "Enter the first integer(at most 20 digits): ";
    cin >> x1;
    cout << "Enter the second integer(at most 20 digits): ";
    cin >> x2;

    len1 = strlen(x1);
    len2 = strlen(x2);

    // 把字符串逆序存入数组,个位在索引0,方便从低位到高位相加
    for (int i = 0; i < len1; i++) {
        n1[i] = x1[len1 - 1 - i] - '0';
    }
    for (int i = 0; i < len2; i++) {
        n2[i] = x2[len2 - 1 - i] - '0';
    }

    // 从低位到高位相加
    for (int i = 0; i < 20; i++) {
        sum[i] = n1[i] + n2[i] + carry;
        if (sum[i] > 9) {
            carry = 1;
            sum[i] -= 10;
        } else {
            carry = 0;
        }
    }

    // 处理最高位的进位并输出提示
    if (carry != 0) {
        sum[20] = carry;
        cout << "Warning: The sum exceeds 20 digits!" << endl;
    }

    cout << "The sum of the two integers is: ";
    // 找到输出起始位置,跳过前置0
    int start = 20;
    while (start > 0 && sum[start] == 0) {
        start--;
    }
    // 从高位到低位输出结果
    for (int i = start; i >= 0; i--) {
        cout << sum[i];
    }
    cout << endl;

    return 0;
}

C字符串数组处理指导

  • 数组必须初始化:未初始化的数组会包含随机垃圾值,处理数字时务必用{0}或memset将数组初始化为0。
  • 获取有效长度:用strlen()获取字符串的有效长度,注意字符串末尾的'\0'不计算在内,避免访问超出字符串范围的内存。
  • 数字存储顺序优化:处理大整数运算时,建议将字符串逆序存入数组,让个位对应数组索引0,方便从低位到高位依次计算进位。
  • 边界检查:输入时要确保字符串长度不超过数组容量(比如这里限制20位,数组定义为21是为了存储结束符'\0'),可通过strlen()判断长度是否超标,超出则提示输入错误。
  • 避免越界访问:循环处理字符串时,循环上限应为字符串的有效长度,而非数组总长度,防止访问未定义的内存区域。

内容的提问来源于stack exchange,提问作者user24234426

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:26:27