将两个整数数组加到一个整数数组中

Add Two Integer Arrays into One Integer Array

我想获取两个整数数组并将它们相加,但我在进位方面遇到了一些困难。

public static int [] add(int [] a, int [] b) 
{
    int col = 0;
    int carry = 0;           
    int[] totalArray = new int[MAX_DIGITS + 1];           
    for(int i = MAX_DIGITS - 1; i > 0; i--) {
        col = a[i] + b[i] + carry; 
        if(col >= 10) {
            carry = col / 10; 
            totalArray[i] %= 10; 
        } else {
            totalArray[i] = col;
            carry = 0; 
        }
    }
    totalArray[0] = carry; 
    return totalArray;      
}

上面的代码正确地添加了 204 + 435,但未能正确地添加 22 + 3122 + 12(输出 65)。 我已经编写了其他方法来确保所有数字都在数组中正确索引并测试了这些方法。看到它适用于 204 + 435 但不适用于另一个,我看不出是什么让我失望。我不想使用 BigInteger class - 在有人建议我应该使用之前。

给定 int[]a [0000000000000000000000999] 和 int[]b [0000000000000000000000483] 当前添加 (a,b) returns [0000000000000000000001000]

这很好用。只需确保您的所有数组仅占用具有实际值的位置 1 thru MAX_DIGITS-1。这允许进位到 totalArray[0].


static int MAX_DIGITS = 6;

int[] a = {0,0,0,0,2,2};
int [] b = {0,0,3,1,2,2};
int [] c = {0,0,0,0,1,2};

int[] part1 = add(a,b);
int [] total = add(part1, c);
System.out.println(Arrays.toString(total));

版画

[0, 0, 3, 1, 5, 6]
  • 我所做的只是将 totalArray 数组的大小减小到 MAX_DIGITS
  • 并在循环中将 i > 0 更改为 i >= 0
  • 确保 index 0 在所有数组中都是 0
  • 剩下的就是你的代码了。
public static int[] add(int[] a, int[] b) {
    int col = 0;
    int carry = 0;
    int[] totalArray = new int[MAX_DIGITS];
    for (int i = MAX_DIGITS-1; i >= 0; i--) {
        col = a[i] + b[i] + carry;
        if (col >= 10) {
            carry = col / 10;
            totalArray[i] %= 10;
        } else {
            totalArray[i] = col;
            carry = 0;
        }
    }
    totalArray[0] = carry;
    return totalArray;
}