Итак, простая процедура, вычислить факториальное число. Код выглядит следующим образом.
int calcFactorial(int num)
{
int total = 1;
if (num == 0)
{
return 0;
}
for (num; num > 0; num--)
{
total *= num;
}
return total;
}
Теперь, это прекрасно работает и прекрасно (есть, конечно, более быстрые и элегантные решения, но это работает для меня) для большинства номеров. Однако при вводе больших чисел, таких как 250, если говорить прямо, вымирает. Теперь первая пара факторных «битов» для 250 - {250, 62250, 15126750, 15438000, 3813186000} для справки.
Мой код выплевывает {250, 62250, 15126750, 15438000, -481781296 }, который явно выключен. Моим первым подозрением было, пожалуй, то, что я нарушил предел 32-битного целого числа, но учитывая, что 2 ^ 32 равно 4294967296, я так не думаю. Единственное, о чем я могу думать, это, возможно, то, что он нарушает знаковый 32-разрядный предел, но разве он не должен думать о такого рода вещах? Если проблема заключается в подписании, я могу решить эту проблему, оставив целое число без знака, но это будет только временное решение, так как следующая итерация даст 938043756000, что намного превышает предел 4294967296.
Итак, моя проблема - подписанный лимит? Если так, что я могу сделать, чтобы вычислить большие числа (хотя у меня есть класс LargeInteger, который я недавно создал, который может подойти!), Не сталкиваясь с этой проблемой снова?