Вы пытались вручную установить NuGet для VS 2013?
У меня была аналогичная проблема, пока я не обнаружил, что установка VS 2013 по какой-то причине не установила менеджер пакетов NuGet. После того, как я установил его вручную, все работало нормально.
Ваша ошибка в той части, где вы делаете последний перенос из ячеек, в которых есть числа с более чем одной цифрой:
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
}
}