Я пытаюсь умножить два массива цифр за счет повторного добавления. Таким образом, число 324 = [4,2,3] раз 24 = [4,2]. То, что я застрял, повторяет добавление 324 и 324, сохраняя это в массиве как [8,4,6], затем повторяя процесс добавления, чтобы получить [8,4,6] + [4,2,3] и т. Д. и т. д. Это то, что у меня есть до сих пор:Умножение путем повторного добавления
BigInt result = new BigInt();
BigInt temp = new BigInt();
int sum = 0;
int carry = 0;
int size = digitList.size();
int k = 0; //k is our multiplier
for (int i = otherBigInt.digitList.size()-1; i >=0; i--) {
k = 10 * k + otherBigInt.digitList.get(i);
}
Здесь я выполняю длинное добавление, по цифре.
for (int i =0; i<size;i++) {
sum = digitList.get(i) + digitList.get(i) + carry;
if (sum > 9) {
temp.digitList.add(sum%10);
carry=1;
} else {
temp.digitList.add(sum);
carry=0;
}
if (sum > 9 && i == size-1) {
temp.digitList.add(sum/10);
}
}
Здесь я застреваю. То, что я пытаюсь сделать здесь, состоит в том, чтобы добавить 324 во временный массив, где он отвечает, а затем назначается массиву результатов. Отсюда я назначаю результат массиву temp, чтобы добавить к сохраненному результату. например: digitlist = 324, temp = 324. Результат = 648 -> digitList = 324, temp = 648. result = 972.
Я очищаю массив результатов, поэтому я могу сохранить более свежий результат на каждой итерации. В этот момент я получаю nullpointerExeption, где index = 0 и size = 0.
for(int i=0;i<25;i++) {
result.digitList.clear();
for (int j=0; j<digitList.size();j++) {
sum = digitList.get(j) + temp.digitList.get(j) + carry;
if (sum > 9) {
result.digitList.add(sum%10);
carry=1;
} else {
result.digitList.add(sum);
carry=0;
}
if (sum > 9 && j == size-1) {
result.digitList.add(sum/10);
}
}
temp.digitList = result.digitList;
}
return result;
}
Это вопрос, связанный с домашним заданием, однако я некоторое время застрял на нем. Решение, к которому я прихожу, кажется слишком сложным для такой простой задачи, может ли кто-то направить меня в правильном направлении?
Возможно, вы не поняли задание? Традиционно умножение x * y на повторное добавление выполняется путем добавления x к результату для y числа раз: 'int result = 0; while (y> 0) {result + = x; y--; } ' –
@Robby Cornelissen Я собирался спросить об этом. – User27854
Я понимаю вопрос, я просто думаю, что мой подход ошибочен. –