Как вычислить факториал 100 на С++

Можно задавать любые вопросы связанные с программированием и мы постараемся на него ответить.

Модератор: Cerberus

гость

Как вычислить факториал 100 на С++

Непрочитанное сообщение гость » Чт янв 28, 2010 8:53

Есть задачка.. Нужно вычислить факториал 100 на С++. Как это сделать??

Аватара пользователя
petun
Новоприбывший
Сообщения: 7
Зарегистрирован: Пн фев 06, 2006 12:44
Контактная информация:

Re: Как вычислить факториал 100 на С++

Непрочитанное сообщение petun » Чт янв 28, 2010 9:23

наверное вот так.. (извиняюсь за синтаксис, уже не все помню из си)....

Код: Выделить всё

$result  = 1;
for ($i=0; $i<=100; $i++) {
  $result = $result * $i;
}


в итоге в переменной $result будет хранится результат. )

Аватара пользователя
Дыбра
Добрый Админ
Сообщения: 5437
Зарегистрирован: Чт мар 31, 2005 16:54
Пол: мужской
Откуда: Выкса
Контактная информация:

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 явно недостаточно для хранения столь больших чисел... ((

Aleksiem
Свой в доску
Сообщения: 316
Зарегистрирован: Пн фев 20, 2006 1:15
Пол: мужской
Откуда: Выкса
Контактная информация:

Re: Как вычислить факториал 100 на С++

Непрочитанное сообщение Aleksiem » Чт янв 28, 2010 11:26

Всё нормально уберётся, ноль он и в Африке ноль:)

Наверное предложу немного скорректированный вариант

Код: Выделить всё

$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);
}

но смысл один - рекурсия:)

Dancer
Новоприбывший
Сообщения: 4
Зарегистрирован: Чт янв 14, 2010 14:37
Пол: мужской

Re: Как вычислить факториал 100 на С++

Непрочитанное сообщение Dancer » Чт янв 28, 2010 12:17

Рекурсию в этом случае использовать - это зло!!!
Даже longint (но как я понимаю это из Паскаля) здесь уже не поможет.
Так как, 100! это что-то там в 150 какой-то степени.
до переполнения, можно вычислять 12! далее уже нужно делать специальные алгоритмы и представлять число в виде элементов массива, или как строки.

Аватара пользователя
Дыбра
Добрый Админ
Сообщения: 5437
Зарегистрирован: Чт мар 31, 2005 16:54
Пол: мужской
Откуда: Выкса
Контактная информация:

Re: Как вычислить факториал 100 на С++

Непрочитанное сообщение Дыбра » Чт янв 28, 2010 12:19

long double может принимать значения до 3.4E+4932, так что думаю прокатит.
Администратор сайта "Виртуальная Выкса"

Гость

Re: Как вычислить факториал 100 на С++

Непрочитанное сообщение Гость » Чт янв 28, 2010 12:56

long double тоже недостаточно! Если ошибки переполнения и не произойдёт, то потеряется точность, т.к. точность чисел с плавающей точкой уменьшается с ростом порядка.

Dancer писал(а):делать специальные алгоритмы и представлять число в виде элементов массива, или как строки.

- скорее всего, единственный выход...

Аватара пользователя
LS
Свой в доску
Сообщения: 394
Зарегистрирован: Ср авг 06, 2008 15:06
Пол: женский
Откуда: Выкса
Контактная информация:

Re: Как вычислить факториал 100 на С++

Непрочитанное сообщение LS » Чт янв 28, 2010 13:25

:crazy:

Ответить

Вернуться в «В помощь будущим программистам»