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

大数字数组相加函数结果异常,请求问题排查与修复协助

修复大数字数组相加函数的问题

常见错误原因及修复方案

  • 数组对齐错误:大数字数组的存储顺序(高位在前/低位在前)必须统一,否则相加时会出现位错位。比如一个数组高位存在索引0,另一个低位存在索引0,直接按索引相加就会导致高位加低位,结果完全错误。
    修复:统一数组存储顺序(推荐低位在前,方便从末尾开始相加),确保两个数组的相同数位对齐后再计算。

  • 进位处理遗漏:相加时只计算当前位结果,未传递进位;或者循环结束后剩余的进位未追加到结果中,会导致最高位少一位或数值错误。
    修复:每一位计算时需包含上一位的进位,公式为sum = 当前位a + 当前位b + 进位,当前位结果取sum % 10,更新进位为sum / 10;循环结束后若进位大于0,必须将其添加到结果数组。

  • 长短数组边界处理不当:当两个数组长度不同时,仅循环到短数组长度,未处理长数组剩余的位(需带上进位),会导致长数组剩余部分的数值计算错误。
    修复:循环条件覆盖两个数组的所有位(i < max(len(a), len(b))),超出短数组长度的位用0替代参与计算。

修复后的示例代码(C#)

public static int[] AddArrays(int[] num1, int[] num2)
{
    List<int> result = new List<int>();
    int carry = 0;
    int i = num1.Length - 1;
    int j = num2.Length - 1;

    // 从低位到高位逐位相加,处理所有数位及剩余进位
    while (i >= 0 || j >= 0 || carry > 0)
    {
        int digit1 = i >= 0 ? num1[i] : 0;
        int digit2 = j >= 0 ? num2[j] : 0;

        int sum = digit1 + digit2 + carry;
        result.Add(sum % 10);
        carry = sum / 10;

        i--;
        j--;
    }

    // 反转结果,将低位在前的存储转为高位在前的正确顺序
    result.Reverse();
    return result.ToArray();
}

代码关键点说明

  1. 从数组末尾(低位)开始遍历,确保相同数位对齐相加;
  2. 对短数组超出边界的位自动补0,避免索引越界同时保证数值正确;
  3. 循环条件包含carry > 0,确保最后一位相加产生的进位不会被遗漏;
  4. 反转结果列表,因为相加过程中是按低位到高位存储,反转后得到符合常规阅读顺序的高位在前数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:11:20