Добавление двух целых массивов в один целочисленный массив

#java #arrays #addition

#java #массивы #добавление

Вопрос:

Я хочу взять два массива целых чисел и сложить их вместе, но у меня возникли некоторые трудности с переносным битом.

 public static int [] add(int [] a, int [] b) 
{
    int col = 0;
    int carry = 0;           
    int[] totalArray = new int[MAX_DIGITS   1];           
    for(int i = MAX_DIGITS - 1; i > 0; i--) {
        col = a[i]   b[i]   carry; 
        if(col >= 10) {
            carry = col / 10; 
            totalArray[i] %= 10; 
        } else {
            totalArray[i] = col;
            carry = 0; 
        }
    }
    totalArray[0] = carry; 
    return totalArray;      
}
  

Приведенный выше код добавляет 204 435 правильно, но не добавляет 22 3122 12 правильно (пункты 65).
Я написал другие методы, чтобы убедиться, что все цифры правильно проиндексированы в массиве, и протестировал эти методы. Видя, что это работает для 204 435, но не для другого, я не вижу, что меня сбивает с толку. Я не хочу использовать класс BigInteger — прежде чем кто-либо предложит мне это сделать.

Учитывая int[]a [0000000000000000000000999] и int[]b [0000000000000000000000483] в настоящее время add(a,b) возвращает [0000000000000000000001000]

Комментарии:

1. Как вы добавляете 3 значения, когда ваш метод принимает только 2 параметра?

2. Я предлагаю написать несколько тестов и добавить их к вашему вопросу, чтобы мы могли точно видеть, какие данные вы используете.

3. @tgdavies готово!

4. Какое значение MAX_DIGITS ? Кроме того, for(int i = MAX_DIGITS - 1; i > 0; i--) должно быть ...i>=0... (вы хотите изучить первую цифру, не так ли?)

Ответ №1:

Это работает просто отлично. Просто убедитесь, что все ваши массивы занимают только места 1 thru MAX_DIGITS-1 с фактическими значениями. Это позволяет переносить в totalArray[0] .

 
static int MAX_DIGITS = 6;

int[] a = {0,0,0,0,2,2};
int [] b = {0,0,3,1,2,2};
int [] c = {0,0,0,0,1,2};

int[] part1 = add(a,b);
int [] total = add(part1, c);
System.out.println(Arrays.toString(total));
  

С принтами

 [0, 0, 3, 1, 5, 6]
  
  • Все, что я сделал, это уменьшил размер totalArray массива до MAX_DIGITS
  • и измените значение i > 0 на i >= 0 в цикле.
  • убедитесь, что index 0 это было 0 во всех массивах.
  • остальное было вашим кодом.
 public static int[] add(int[] a, int[] b) {
    int col = 0;
    int carry = 0;
    int[] totalArray = new int[MAX_DIGITS];
    for (int i = MAX_DIGITS-1; i >= 0; i--) {
        col = a[i]   b[i]   carry;
        if (col >= 10) {
            carry = col / 10;
            totalArray[i] %= 10;
        } else {
            totalArray[i] = col;
            carry = 0;
        }
    }
    totalArray[0] = carry;
    return totalArray;
}
  

Комментарии:

1. Спасибо за вклад, и хотя это верный аргумент, это не было проблемой. Он прерывается только тогда, когда должен содержать цифру

2. Поскольку totalArray на единицу больше, чем массивы аргументов, разве вы не должны добавлять 1 к индексу totalArray? Я внес изменения, и это сработало для меня.

3. оказывается, я на самом деле не добавлял один к общему массиву, скорее я изменил инициализацию общего массива на int[] totalArray = new int[MAX_DIGITS]; Проблема была в if(col > = 10), когда я делал totalArray[i] % = 10; он должен иметьбыл totalArray[i] = col % 10;