大数字数组相加函数结果异常,请求问题排查与修复协助
修复大数字数组相加函数的问题
常见错误原因及修复方案
数组对齐错误:大数字数组的存储顺序(高位在前/低位在前)必须统一,否则相加时会出现位错位。比如一个数组高位存在索引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(); }
代码关键点说明
- 从数组末尾(低位)开始遍历,确保相同数位对齐相加;
- 对短数组超出边界的位自动补0,避免索引越界同时保证数值正确;
- 循环条件包含
carry > 0,确保最后一位相加产生的进位不会被遗漏; - 反转结果列表,因为相加过程中是按低位到高位存储,反转后得到符合常规阅读顺序的高位在前数组。
内容的提问来源于stack exchange,提问作者Punzicul
相关产品推荐
相关产品推荐

