Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
димарик
0 / 0 / 2
Регистрация: 26.02.2012
Сообщений: 81
#1

факториал пятью способами - C++

18.06.2012, 15:46. Просмотров 1084. Ответов 12
Метки нет (Все метки)

Помогите написать пять способов нахождения факториала, число можно брать любое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2012, 15:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос факториал пятью способами (C++):

Описать рекурсивные функции вещественного типа, вычисляющие факториал и двойной факториал заданного числа
Описать рекурсивные функции Fact(N) и Fact2(N) вещественного типа, вычисляющие...

Создать класс с пятью методами
нужно создать класс обычный с пятью методами помогите прошу!!!

Найти количество групп с пятью символами
Обьясните пожалуста задачу: Дана строка, состоящая из групп нулей и единиц....

Найти количество групп с пятью символами.
Дана строка, состоящая из групп нулей и единиц. Каждая группа отделя-ется от...

Найти в строке количество групп с пятью символами
Необходимо решать задачу: Дана строка, состоящая из групп нулей и единиц....

В строке найти количество групп с пятью символами
Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется от...

12
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,437
Записей в блоге: 30
18.06.2012, 16:12 #2
Два способа очевидны - в цикле и через рекурсию
0
димарик
0 / 0 / 2
Регистрация: 26.02.2012
Сообщений: 81
18.06.2012, 16:14  [ТС] #3
а ещё
0
bLesk
42 / 42 / 8
Регистрация: 24.11.2009
Сообщений: 165
18.06.2012, 16:16 #4
ну циклы тоже разные бывают =) так что ещё + 2-3 цикла )
0
DiffEreD
1441 / 778 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
18.06.2012, 16:23 #5
C++
1
2
3
4
long fuck(long n)
{
   return n > 0 ? n * fuck(n - 1) : 1;
}
C++
1
2
3
4
5
int factorial(int n)
 {
  if(n==1 || n==0) return 1;
   return n* factorial (n-1);
 }
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,437
Записей в блоге: 30
18.06.2012, 16:33 #6
yuron_477, это не два разных способа вычисления, а два разных способа записи одного и того же кода

Цитата Сообщение от димарик Посмотреть сообщение
а ещё
Честно говоря, сомневаюсь, что нужно что-то ещё. Т.е. остальные способы скорее всего будут высосаны из пальца. Я по крайней мере не представляю их
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.06.2012, 16:47 #7
Ну допустим 3-ий вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
template<int N>
struct Fact
{
   static long long int apply()
   {
      return N * Fact<N - 1>::apply();
   }
};
 
template<>
struct Fact<0>
{
   static long long int apply()
   {
      return 1;
   }
};
 
int main()
{
   std::cout << Fact<5>::apply() << std::endl;
}
http://liveworkspace.org/code/262b9ed545f6a0ecebac5502eca0cac6

Конечно с натяжкой, ибо та же рекурсия, но на шаблонах.

Добавлено через 1 минуту
Или так.
Сути не меняет.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
template<int N>
struct Fact
{
   static constexpr long long int value = N * Fact<N - 1>::value;
};
 
template<>
struct Fact<0>
{
   static constexpr long long int value = 1;
};
 
int main()
{
   std::cout << Fact<5>::value << std::endl;
}
0
alkagolik
Заблокирован
18.06.2012, 16:55 #8
есть в свободном доступе. Хорошая вещь
А. В. Ладиков, “Улучшенный алгоритм вычисления факториала”, Матем. заметки, 83:6 (2008), 857–863
0
Catstail
Модератор
23536 / 11646 / 2036
Регистрация: 12.02.2012
Сообщений: 18,985
18.06.2012, 17:53 #9
Цитата Сообщение от димарик Посмотреть сообщение
число можно брать любое
попробуйте любым способом вычислить 200!
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.06.2012, 18:08 #10
Еще можно вычислять по модулю брутфорсом и улучшенным алгоритмом.
Еще можно прикрутить длинную арифметику.
0
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
18.06.2012, 18:21 #11
по формуле Стирлинга
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <cmath>
 
int main()
{
    std::size_t n(6);
    std::cout << std::sqrt(2 * 3.14159 * n) * std::pow((n / 2.71828), n);
    return 0;
}
2
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,437
Записей в блоге: 30
18.06.2012, 18:24 #12
фигасе...
0
VadimAndronov
24 / 24 / 11
Регистрация: 15.06.2012
Сообщений: 138
18.06.2012, 19:52 #13
Можно составить таблицу значений и искать там нужный результат при вызове функции
0
18.06.2012, 19:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2012, 19:52
Привет! Вот еще темы с решениями:

Объявить массив из 5 элементов int и инициализируйте его первыми пятью положительными нечетными числами.
Дан вопрос. Объявить массив из 5 элементров int и инициализируйте его первыми...

Дана строка, состоящая из групп нулей и единиц.Найти количество групп с пятью символами
Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется от...

Пятью пять - двадцать пять
Привет родные форумчане! Пожалуйста помогите решить буду особенно благодарен...

Факториал
Задано целое положительное число n. Определить значение выражения: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru