在跟踪进位的同时,如何获得两个数组的和(例如Java中的bigInt)?

时间:2018-09-29 16:28:48

标签: java arrays bigint

我仍在学习编程,我试图添加两个数组A和B,同时跟踪进位。数组全部为SIZE = 20,看起来像这样:A = {0,0,..,n} 我下面的代码似乎无法正常工作,我无法终生发现错误所在。例如,如果我添加            A ={0,0,0...,1,2,3}作为数组,并且           B ={0,0,0,...,7,8,9}作为数组,我得到802而不是912.
 代码:

    int index = SIZE -1; 
    int[] newBI = new int[SIZE]
    while(index >=0)
    {   
        int carry = 0; 
        int sum = A[index] + B[index] + carry;
        if(sum >=10) {
            carry = sum/10;
            sum = sum %10; 

        }
        newBI[index] = sum; 
        index--; 
    }
    return newBI; 
}

请帮助!

1 个答案:

答案 0 :(得分:2)

正如注释中所指出的,您需要记住carry从一个数字到下一个数字的值。另外,在没有数字溢出时清除carry也很重要。最后,如果在循环结束时设置了carry,则总和太大而无法放入数组中。

static int[] sum(int[] A, int[] B)
{
  int index = SIZE -1; 
  int[] newBI = new int[SIZE];
  int carry = 0;
  while(index >=0)
  {   
      int sum = A[index] + B[index] + carry;
      if(sum >= 10) {
          carry = sum/10;
          sum = sum %10; 
      }
      else
      {
        // important to clear the carry
        carry = 0;
      }
      newBI[index] = sum; 
      index--; 
  }
  if(carry == 1)
  {
    throw new ArithmeticException();
  }
  return newBI; 
}