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

基于字符数组实现0-100位大数相加的技术问题咨询

解决大数相加中空元素的处理问题

我来帮你搞定这个问题~你当前的核心困扰在于数组里那些没被赋值为数字的“空元素”——这些位置可能是字符串结束符'\0',也可能是未初始化的垃圾值,直接拿来计算肯定会出错。咱们可以通过判断字符是否为有效数字来解决,完美覆盖你说的两种场景:

  • 当bigM[i]是空元素时,直接用bigN[i]加进位值计算
  • 当bigN[i]是空元素时,直接用bigM[i]加进位值计算

另外我发现你原代码里的循环顺序有问题:既然已经把数组反转了(最低位移到数组开头),那应该从下标0开始循环(从个位加起),之前反向循环的逻辑是错的,我一起帮你修正了。

以下是修改后的完整函数代码:

// AddTwoBigNumbers: 对以字符形式存储的两个大数求和
// 输入:char bigN[], char bigM[]:两个大数
// 输出:将求和结果存入输入数组char sum[]
void AddTwoBigNumbers(char bigN[], char bigM[], char sum[]) {
    reverseArray(bigN, 0, 100);
    reverseArray(bigM, 0, 100);
    
    int carry = 0;
    // 从下标0开始循环(反转后最低位在数组开头),覆盖0-100所有位置
    for(int i = 0; i <= 100; i++) { 
        // 判断当前位是否为有效数字,是则转成数值,否则当作0处理
        int numN = (bigN[i] >= '0' && bigN[i] <= '9') ? (bigN[i] - '0') : 0;
        int numM = (bigM[i] >= '0' && bigM[i] <= '9') ? (bigM[i] - '0') : 0;
        
        int sum_two = numN + numM + carry;
        sum[i] = sum_two % 10 + '0';
        carry = sum_two / 10;
    }
    
    reverseArray(sum, 0, 100);
}

关键逻辑说明:

  1. 空元素判断:用三元运算符检查字符是否在'0'到'9'范围内,不符合条件就当作0处理,正好对应你要的两种情况:
    • 若bigM[i]是空元素,numM=0,计算时就等价于bigN[i] + 0 + carry
    • 若bigN[i]是空元素,numN=0,计算时就等价于0 + bigM[i] + carry
  2. 循环顺序修正:反转数组后,最低位在数组下标0的位置,从0开始循环才能从个位到最高位依次相加,符合大数加法的逻辑
  3. 进位处理:每一步计算后更新进位,最后一位(i=100)的进位也会被存入sum数组,反转后就是结果的最高位,刚好适配101位的数组长度(0-100)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:41:17