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
- 循环结束时,
为1,结果的最高有效位将被删除carriedValue
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请查看演示,它返回正确的结果。