Выполнение арифметических операций над изолированными элементами массива - PullRequest
2 голосов
/ 04 февраля 2012

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

Вопрос:

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

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

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

688

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

349


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

ArrayList1: [6, 8, 8]

ArrayList2: [3, 4, 9]

Теперь, допустим, я хочу выполнить какое-то добавление, например ArrayList1 + ArrayList2.

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

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

Ответы [ 4 ]

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

Подумайте, как бы вы поступили в начальную школу. Вы начнете с того, что выстроите в ряд такие цифры:

    1  3  7
+      4  5
-----------

Затем вы добавили бы две последние цифры, чтобы получить

    1  3  7
+      4  5
-----------
          2

И у вас будет перенос 1. Затем вы добавите следующие две цифры плюс перенос:

    1  3  7
+      4  5
-----------
       8  2

Теперь у вас есть перенос 0, так что вы можете добавить последнюю цифру и пропущенную цифру, чтобы получить

    1  3  7
+      4  5
-----------
    1  8  2

Общий шаблон выглядит следующим образом: начиная с последней цифры каждого массива, сложите последние два числа вместе, чтобы получить сумму и перенос. Запишите цифру единиц суммы в результирующий массив, а затем перенесите перенос в следующий столбец. Затем сложите значения в этом столбце (плюс перенос) и повторите этот процесс для всех цифр. После того, как вы исчерпали все цифры в одном из чисел, продолжайте делать сумму, но сделайте вид, что в качестве отсутствующей цифры стоит 0. Как только вы обработаете все цифры, у вас будет ответ, который вы ищете.

Надеюсь, это поможет!

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

Если вы храните цифры в обратном порядке, вашими массивами будет намного легче манипулировать, потому что их единицы, десятки, сотни и т. Д. Будут выровнены друг с другом (то есть они будут сидеть с одинаковым индексом).

Затем вы можете реализовать сложение так же, как они учат в начальной школе: просматривать массивы цифр одну за другой, добавлять их, проверять переполнение цифр (>=10) и обращать внимание на флаг переноса (цифра результата).(a+b) % 10, флаг переноса (a+b)/10).Если флаг переноса не равен нулю, когда вы закончили с добавлением, и с обеих сторон не осталось дополнительных цифр, добавьте флаг переноса в конец массива результатов.

Единственная оставшаяся проблема - отображениесписки.Вы можете сделать это с помощью простого обратного цикла.

PS Если вы хотите дважды проверить вычисление мульчи-трилиона на что-то, что, как известно, работает, используйте BigInteger для вычисленияожидаемые результаты, и сравните свои результаты с их.

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

у вас есть

list1
list2

и нужна дополнительная переменная

int carry

тогда

1 do add(0,0) on short list, so that at the end two lists have same length.

2 reversely loop the two list. 
  sum=(carry+(e1+e2))
  set e1 (list1 element) = sum%10, 
  carry = sum/10, 
  till the first element.
3 if carry==1, list1.add(0,1)

now list1 stores the result.

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

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

Думайте о массиве как о контейнере для хранения. Он может содержать элементы, которые имеют тип «целое число», но его тип по-прежнему «контейнер для хранения». Вы не можете выполнять математику для этих типов объектов - только их содержимое.

...