Алгоритм умножения больших чисел не всегда работает

Вы пытались вручную установить NuGet для VS 2013?

У меня была аналогичная проблема, пока я не обнаружил, что установка VS 2013 по какой-то причине не установила менеджер пакетов NuGet. После того, как я установил его вручную, все работало нормально.

0
задан Yassin Hajaj 16 January 2019 в 18:45
поделиться

1 ответ

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

        if(res[i] > 9) {
            res[i - 1] += (res[i] / 10) % 10; //left-digit
            res[i] = res[i] % 10; //right-digit
        }

Здесь вы предполагаете, что res[i] имеет большинство двух цифр (не больше 99). Предположение не обосновано. Я попытался умножить 99 999 999 999 (одиннадцать цифр) на себя, используя вашу программу, и на этом этапе res[12] содержал 100. Таким образом, (res[i] / 10) % 10 оценивается как 0, и вы не переносите что-либо на res[11] или res[10], как следует.

Полагаю, мне следует оставить это для себя, чтобы найти хорошее решение.

Редактировать: Для удобства чтения это ваше собственное исправление из вашего комментария, отформатированное и с отступом:

    for (int i = res.length - 1; i >= 0; i--) {
        if (res[i] > 9) {
            if (res[i] > 99) {
                res[i - 1] += ((res[i] / 100) % 10) * 10; // first digit (*10)
                res[i - 1] += (res[i] / 10) % 10; // second digit
            } else {
                res[i - 1] += (res[i] / 10) % 10; // left-digit
            }
            res[i] = res[i] % 10; // right-digit
        }
    }
0
ответ дан Ole V.V. 16 January 2019 в 18:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: