0
public void add(int[]a1,int[]a2){       

    int atotal[] = new int[20];
    int capacity3 = Math.max(a1.length, a2.length);

    for (int i = 0; i < capacity3; i++) 
    {
      int a3 = a1[i] + a2[i];
      if (a3 > 9)
      {
        atotal[i] = a3 % 10;
        atotal[i+1] += a3 /10;
      }
      else
      {
        atotal[i] = a3;
      }
    } 

    for(int i = capacity3 - 1; i >= 0; i--)
    {
      System.out.print(atotal[i] + " ");
    }
}

在我的程序中将两个数组中的每个元素相加时,每个单个位相加的进位不会添加到下一个无关位。所以如果array1 [0] = 9,array2 [0] = 2 ..我的结果[0] = 1并且我的结果[1]没有来自[0]的加法。例如,如果我将 9999 和 1234 作为两个数组,则结果是 0123 而不是 11233。

4

1 回答 1

4

问题是您将进位放入atotal[i+1]然后您完全忽略了下一个循环中的值。

要解决此问题,您只需添加atotal[i]a3.

int a3 = a1[i] + a2[i] + atotal[i];

然后在 if 语句中你真的不需要在+=这里做,atotal[i+1] += a3 / 10; 因为atotal[i+1]它总是 0 并且它在下一个循环中被擦除,所以它可能只是=.

最后,如果有进位,您的 for 循环可能会丢失第一个数字。要解决此问题,您可以从i容量 3 开始,但在某些情况下,您将打印前导 0。

add(new int[]{9,9,9,9}, new int[]{4,3,2,1});所以用这些修复调用会产生

1 1 2 3 3 

所以固定的代码可能看起来像这样。

public static void add(int[]a1,int[]a2){       
    int atotal[] = new int[20];
    int capacity3 = Math.max(a1.length, a2.length);
    for (int i = 0; i < capacity3; i++) {
        int a3 = a1[i] + a2[i] + atotal[i];
        System.out.println(a3);
        if(a3>9) {
            atotal[i] = a3 % 10;
            atotal[i+1] = a3 / 10;
        } else {
            atotal[i]=a3;
        }
    } 
    for(int i=capacity3; i>=0; i--) {
        System.out.print(atotal[i] + " ");
    }
}
于 2013-06-02T01:02:48.037 回答