0

расчёт факториала java

Доброго дня всем. Решал задачку на java, нужно было вывести расчет факториала числа, вводимого с консоли. Столкнулся с проблемой, что при вводе цифр больше 12 расчет факториала идет неверный. Сталкивался кто с таким?

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