Выполнение умножения на изолированные элементы массива - PullRequest
0 голосов
/ 04 февраля 2012

Я ищу четкое объяснение моего вопроса (НЕ ищу код), но если немного кода поможет объяснить себя, тогда, пожалуйста, спасибо ..)

Вопрос:

-использование Java

-Основной класс запрашивает у пользователя 2 целочисленных ввода, а затем помещает их в 2 массива, типа integer.Каждая цифра разбита и хранится в своем собственном индексе, поэтому это, так сказать, собственный «элемент».

Например, с моим кодом прямо сейчас это выглядит примерно так:

"Пожалуйста, введите целое число:"

688

"Пожалуйста, введите другое целое число:"

34

На данный момент, внутренне ясохранили ввод как 2 массива, которые выглядят так:

ArrayList1: [6, 8, 8]

ArrayList2: [3, 4]

Теперь давайтеДопустим, я хочу выполнить несколько операций умножения, например, ArrayList1 * ArrayList2.

Я, вероятно, продолжу создание временного массива 'результата', а затем перенесу этот ответ в arraylist1, когда мои вычисления будут завершены.

Но та часть, с которой у меня возникли проблемы, заключается в систематическом и ясном способе умножения arraylists вместе.Имейте в виду, что в этом примере используется массив, который представляет целое число длины 3 и 2 соответственно, но это может быть что угодно.Я мог бы, например, иметь массив с 50 элементами, такими как [2, 4, 4, 3, 7, 3, 6, 3, .............], который может представлятьогромное количество в триллионах и т. д.

Ответы [ 3 ]

2 голосов
/ 04 февраля 2012

Если вы не используете быстрый алгоритм, такой как Умножение Карацубы , алгоритм умножения двух чисел, как вы описали, является простым алгоритмом O (n ^ 2), который вы изучили в начальной школе - умножьте каждую цифру второй список с каждой цифрой первого списка, несущий при необходимости. Итак, для вашего первого примера этот алгоритм дает вам 688 x 34 = [6 * 4, 8 * 4, 8 * 4] + [6 * 3, 8 * 3, 8 * 3, 0] = [24, 32, 32] + [18, 24, 24, 0], который после переноса становится [2, 7, 5, 2] + [2, 0, 6, 4, 0] = [2, 3, 3, 9, 2].

1 голос
/ 04 февраля 2012

Похоже, что вы хотите в конечном итоге умножить, в вашем примере: 688 * 34. Чтобы сделать это со структурой, которую вы используете, ArrayList это будет сделано с использованием 2 для циклов, по одному для каждого списка (улучшено для цикла сэто повторяемый объект).Взятие каждого элемента из первого массива будет умножено на 10 ^ i степени, давая вам (8 * 10 ^ 0) + (8 * 10 ^ 1) + (6 * 10 ^ 2) = 688. Каждый будет умножен на каждыйцелое число во втором списке и умножено на 10 ^ j, как было сделано в первом цикле.Держите текущий счетчик каждой итерации в цикле, чтобы суммировать каждое умножение по мере того, как оно происходит.

0 голосов
/ 04 февраля 2012

псевдокод:

subtotal=0
iterate AL1 on index i (where i goes from zero to AL1.length()-1)
{
  iterate AL2 on index j (where j goes from zero to AL2.length()-1))
  {
    increment subtotal by AL2[AL2.length-j]*10^j * AL1[AL1.length-i]*10^i
    increment j
  }
  increment i
}
...