Java 使用数组的大整数之和

Java 使用数组的大整数之和,java,Java,我正试图写一个程序,将两个大数字相加。我使用了两个数组来求和,第三个数组用来存储求和的结果,但是我得到了错误的输出,你能检查一下吗 以下是我的方法: public static int [] sumBigInt(int [] A, int [] B, int n) { int sumPerCol = 0; int carriedValue = 0; int[] totalArray = new int[A.lengt

我正试图写一个程序,将两个大数字相加。我使用了两个数组来求和,第三个数组用来存储求和的结果,但是我得到了错误的输出,你能检查一下吗

以下是我的方法:

public static int [] sumBigInt(int [] A, int [] B, int n) 
    {
        int sumPerCol = 0;
        int carriedValue = 0;           
        int[] totalArray = new int[A.length + 1];           
        for(int i = A.length - 1; i >= 0; i--)
        {
            sumPerCol = A[i] + B[i] + carriedValue;             

            if( i == 0)
                totalArray[i] = carriedValue;

            else if(sumPerCol >= 10)
            {   
                carriedValue = sumPerCol / 10;
                totalArray[i] = sumPerCol % 10;
            }
            else
            {
                totalArray[i] = sumPerCol;
                carriedValue = 0;
            }
        }// end of for-Loop         
        return totalArray;      
    }
****总的来说,我没有得到正确的输出:

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.println(TwoTo_n(8));

        int[] arrayA = {6,9,4,6,9,1,8,9,3,5,6};
        int[] arrayB = {5,9,6,4,3,1,6,7,6,9,5};

        int[] arrayTest = new int[arrayA.length + 1];

        for (int i = 0; i < arrayTest.length; i++)
            arrayTest[i] = sumBigInt(arrayA, arrayB, 14)[i];

        for (int i = 0; i < arrayTest.length; i++)
            System.out.print(arrayTest[i] + " ");   
    }
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
系统输出println(TwoTo_n(8));
int[]arrayA={6,9,4,6,9,1,8,9,3,5,6};
int[]arrayB={5,9,6,4,3,1,6,7,6,9,5};
int[]arrayTest=新int[arrayA.length+1];
for(int i=0;i
以下是我得到的输出:
11911123570510

输出应为: 1 2 9 1 1 2 3 5 7 0 5 1=>现在位置1中的数字消失:(

缺少一个数字;该数字应添加到最后一个数组中的零位置,但它没有显示出来


谢谢

您的代码几乎是正确的。为了修复它,请思考在完成循环后,
carriedValue
会发生什么:

for(int i = A.length - 1; i >= 0; i--) {
    sumPerCol = A[i] + B[i] + carriedValue;             
    if(sumPerCol >= 10) { 
        carriedValue = sumPerCol / 10;
        totalArray[i+1] = sumPerCol % 10;
    } else {
        totalArray[i+1] = sumPerCol;
        carriedValue = 0;
    }
}// end of for-Loop 
totalArray[0] = carriedValue;
  • 当循环结束时,
    carriedValue
    为零,程序返回正确的值
  • 循环结束时,
    carriedValue
    为1,结果的最高有效位将被删除
要解决此问题,只需将
totalArray
中的数字位置“移位”1,并将
carriedValue
分配给循环结束后的顶部数字:

for(int i = A.length - 1; i >= 0; i--) {
    sumPerCol = A[i] + B[i] + carriedValue;             
    if(sumPerCol >= 10) { 
        carriedValue = sumPerCol / 10;
        totalArray[i+1] = sumPerCol % 10;
    } else {
        totalArray[i+1] = sumPerCol;
        carriedValue = 0;
    }
}// end of for-Loop 
totalArray[0] = carriedValue;
请注意使用
totalArray[i+1]
代替
totalArray[i]
。这是因为您的方法会自动将有效位数扩展1。只有当
carriedValue
为非零时,才可以通过重新分配数组并将数据复制到数组中来更改此行为


您要传递的第三个参数是什么?for循环将导致函数在数组中的每个位置获取一次,而不是总共获取一次,这要慢得多(尽管您很可能不会注意到这种小数组的差异)。您可以摆脱循环,直接将输出分配给
arrayTest
,无论是在初始化中还是单独分配,例如
int[]arrayTest=sumBigInt(arrayA,arrayB,14)
。我在(I==0)时添加了另一个if语句,但仍然没有得到正确的输出:@Mike请查看演示,它返回正确的结果。