0
расчёт факториала java
Доброго дня всем. Решал задачку на java, нужно было вывести расчет факториала числа, вводимого с консоли. Столкнулся с проблемой, что при вводе цифр больше 12 расчет факториала идет неверный. Сталкивался кто с таким?
2 Answers
+ 1
Привет,
Да, это обычная проблема, с которой мы сталкиваемся при вычислении факториалов. Проблема была связана с ограничением диапазона данных для типа `int`, который может поддерживать правильный расчет факториала только до 12!. За пределами 12! переполнение целого числа приведет к неправильному результату расчета.
Я не знаю, есть ли в Java целочисленные типы без знака, а в C/C++ есть целочисленные типы без знака. Но ограничения по-прежнему существуют даже при использовании этих целочисленных типов без знака. Насколько я помню, самое большое целое число без знака в C/C++ (unsigned long long int) поддерживает правильный расчет факториала только до 20!
Вы можете использовать `long` для числового типа вместо `int`, но я думаю, это вам не поможет ;)
Перевод Google
0
Как упоминалось выше, у типа int недостаточно диапазона возможных чисел, т.е. если мы перейдем его границы, то устроим переполнение. Для примера можно взять тип byte, его диапазон от -128 до 127, и если мы попытаемся сделать так
byte b = 127;
b++; // -128
то мы получим вот такой вот результат. При каждом переполнении, мы переводим значение переменной в другой бок. Было 127 (верх диапазона), стало -128 (низ диапазона) (и наоборот)
Можно использовать класс BigInteger для представления больших чисел, он находится в пакете java.math
(Прежде с ним никогда не работал, поэтому советую самостоятельно с ним ознакомиться)
Вот небольшой пример как его можно использовать для факториала
https://sololearn.com/compiler-playground/c31nP39pcdhI/?ref=app