Как вы получаете сумму двух массивов при отслеживании переноса (например, bigInt в Java)? - PullRequest
0 голосов
/ 29 сентября 2018

Я все еще учусь программировать и пытаюсь добавить два массива, 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 голосов
/ 29 сентября 2018

Как было отмечено в комментариях, вам нужно запомнить значение 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; 
}
...