Страница 1 из 1
Как вычислить факториал 100 на С++
Добавлено: Чт янв 28, 2010 8:53
гость
Есть задачка.. Нужно вычислить факториал 100 на С++. Как это сделать??
Re: Как вычислить факториал 100 на С++
Добавлено: Чт янв 28, 2010 9:23
petun
наверное вот так.. (извиняюсь за синтаксис, уже не все помню из си)....
Код: Выделить всё
$result = 1;
for ($i=0; $i<=100; $i++) {
$result = $result * $i;
}
в итоге в переменной $result будет хранится результат. )
Re: Как вычислить факториал 100 на С++
Добавлено: Чт янв 28, 2010 9:37
Дыбра
Ну в принципе примерно так, только убрать знаки $ перед именами переменных.
Внимательнее нужно смотреть на тип переменной в которой будет храниться значение. Боюсь, что даже в double он может не уместиться.
Но вообще для вычисления факториала удобнее использовать рекурсию. Но понять ее сложнее
Re: Как вычислить факториал 100 на С++
Добавлено: Чт янв 28, 2010 9:42
Гость
petun писал(а):наверное вот так.. (извиняюсь за синтаксис, уже не все помню из си)....
Код: Выделить всё
$result = 1;
for ($i=0; $i<=100; $i++) {
$result = $result * $i;
}
в итоге в переменной $result будет хранится результат. )
Этот код на PHP?
Эх и эх.. Если бы всё было так просто... Вы пробовали запускать этот код на С++? Число в факториале 100 настолько велико, что непременно произойдёт переполнение и программа вывалится в ошибку... Одной переменной int явно недостаточно для хранения столь больших чисел... ((
Re: Как вычислить факториал 100 на С++
Добавлено: Чт янв 28, 2010 11:26
Aleksiem
Всё нормально уберётся, ноль он и в Африке ноль:)
Наверное предложу немного скорректированный вариант
Код: Выделить всё
$result = 1;
for ($i=2; $i<=100; $i++) {
$result = $result * $i;
}
Ну или опять же с поправкой на синтаксис и видимо с очень большой поправкой
Код: Выделить всё
longint Fact(int a)
{
if (a==1) return 1;
return a*Fact(a-1);
}
Ну можно поизвращаться как-нибудь вот так
Код: Выделить всё
longint Fact(int a)
{
return (a==1)?1:a*Fact(a-1);
}
но смысл один - рекурсия:)
Re: Как вычислить факториал 100 на С++
Добавлено: Чт янв 28, 2010 12:17
Dancer
Рекурсию в этом случае использовать - это зло!!!
Даже longint (но как я понимаю это из Паскаля) здесь уже не поможет.
Так как, 100! это что-то там в 150 какой-то степени.
до переполнения, можно вычислять 12! далее уже нужно делать специальные алгоритмы и представлять число в виде элементов массива, или как строки.
Re: Как вычислить факториал 100 на С++
Добавлено: Чт янв 28, 2010 12:19
Дыбра
long double может принимать значения до 3.4E+4932, так что думаю прокатит.
Re: Как вычислить факториал 100 на С++
Добавлено: Чт янв 28, 2010 12:56
Гость
long double тоже недостаточно! Если ошибки переполнения и не произойдёт, то потеряется точность, т.к. точность чисел с плавающей точкой уменьшается с ростом порядка.
Dancer писал(а):делать специальные алгоритмы и представлять число в виде элементов массива, или как строки.
- скорее всего, единственный выход...
Re: Как вычислить факториал 100 на С++
Добавлено: Чт янв 28, 2010 13:25
LS