Java数组求和进位问题:索引0无法完整显示最终进位数值
解决数组相加最后一位进位保留完整数值的问题
嘿,我明白你遇到的问题了——当处理到最高位(索引0)的时候,现在的逻辑还是会把超过10的部分当成进位丢掉,只留个位,但你希望这里直接显示完整的总和,不管是不是超过10对吧?
问题出在哪?
你当前的代码里,不管是不是最后一位,都会把进位标记toggle设为sum >= carry,而且处理的时候都只保留了个位(或者加进位后的个位)。但对于最高位来说,我们不需要再传递进位了,应该直接把总和加上之前的进位的完整值放进去,不用再拆分。
怎么修改?
我们可以把循环拆成两部分:先处理除最高位之外的所有位置,正常传递进位;然后单独处理最高位,直接保留完整的总和(包括可能的进位),不再拆分。
修改后的完整代码
import java.util.Arrays; import java.util.Scanner; public class SumArray { public static void main(String[] args) { Scanner input = new Scanner(System.in); int size = 2; int[] arr1 = new int[size]; int[] arr2 = new int[size]; int[] result = new int[2]; System.out.println("Array 1 : "); for(int i = 0; i < arr1.length; i++){ System.out.print("Position : " + i + " = " ); arr1[i] = input.nextInt(); } System.out.println(Arrays.toString(arr1)); System.out.println("Array 2 : "); for(int i = 0; i < arr2.length; i++){ System.out.print("Position : " + i + " = " ); arr2[i] = input.nextInt(); } System.out.println(Arrays.toString(arr2)); //carry sum boolean hasCarry = false; // 先处理除最高位(i=0)之外的所有位,正常传递进位 for(int i = result.length - 1; i > 0; i--){ int sum = arr1[i] + arr2[i]; if (hasCarry) { sum += 1; } if (sum >= 10) { result[i] = sum - 10; hasCarry = true; } else { result[i] = sum; hasCarry = false; } } // 单独处理最高位,直接保留完整总和(含进位) int finalSum = arr1[0] + arr2[0]; if (hasCarry) { finalSum += 1; } result[0] = finalSum; System.out.println("Final Array : " + Arrays.toString(result)); } }
关键修改点说明
- 把原来的
toggle改名为hasCarry,语义更清晰 - 循环只处理从最后一位到索引1的位置,维持正常的进位传递逻辑
- 单独处理索引0的位置:直接计算总和加上之前的进位,把完整数值赋值给
result[0],不再拆分进位
比如你提到的场景:5+6=11加上进位1等于12,现在result[0]就会直接存储12,而不是只保留个位2了。
内容的提问来源于stack exchange,提问作者CostZ
相关产品推荐
相关产品推荐

