Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MicroSB
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 8
#1

Составить функцию нахождения факториала - C++

13.09.2013, 18:33. Просмотров 874. Ответов 12
Метки нет (Все метки)

Составить функцию нахождения факториала и вычислить значение выражения: (k-m)! *n!/(n+k)!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 18:33     Составить функцию нахождения факториала
Посмотрите здесь:

C++ Что не так в программе для нахождения факториала?
Написать программу нахождения факториала числа в виде рекурсивной функции C++
Написать программу нахождения факториала числа в виде рекурсивной функции C++
C++ Составить функцию нахождения площади равностороннего треугольника
C++ Написать функцию вычисления факториала
C++ Составить функцию нахождения максимального элемента Мх в диагонали матрицы, параллельной главной диагонали
C++ Составить функцию нахождения максимального элемента
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
238 / 221 / 76
Регистрация: 21.02.2013
Сообщений: 515
Завершенные тесты: 1
13.09.2013, 18:59     Составить функцию нахождения факториала #2
функция факториала:
C++
1
2
3
4
5
6
7
8
9
int factorial(int f)
{
   if (f == 0 && f == 1)
      return 1;
   if (f > 1)
      return factorial(f - 1) * f;
   else
      return f;
}
а вот вычислить выражение не понял
Avazart
7062 / 5239 / 261
Регистрация: 10.12.2010
Сообщений: 23,037
Записей в блоге: 17
13.09.2013, 22:09     Составить функцию нахождения факториала #3
Цитата Сообщение от MicroSB Посмотреть сообщение
(k-m)! *n!/(n+k)!
Такую штуку лучше не вычислять через ф-цию.
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
13.09.2013, 22:57     Составить функцию нахождения факториала #4
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
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
#include<cstring>
 
using namespace std;
 
int factorial( int n ) {
    if ( n < 0 ) // если пользователь ввел отрицательное число
        return 0; // возвращаем ноль
    // если n > 0 рекурсивно вызываем функцию и уменьшаем аргумент на 1
    return !n ? 1 : n * factorial( n - 1 );
}
 
int main() {
 
    int k, m, n;
    // просим пользователя ввести данные
    cout << "Введите целочисленные значения k, m, n через пробел ";
    cin >> k >> m >> n;
 
    // вычисляем результат
    double result = static_cast < double >( factorial( k - m ) ) * factorial( n ) / factorial( n + k );
 
    // проверяем результат
    if ( !result ) { // если результат равен 0
 
        // выдаем сообщение о неверных введенных данных
        cout << "Рассчет с введенными значениями невозможен!" << endl;
        return -1; // выходим из программы
    }
 
    // а если результат не 0, то выводим его на экран
    cout << "Результат равен " << result << endl;
 
    return 0;
}
Georgg
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 37
05.08.2014, 03:16     Составить функцию нахождения факториала #5
а для чего здесь нужно приведение типа static_cast < double > ?
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
05.08.2014, 04:24     Составить функцию нахождения факториала #6
Georgg, наверное, чтобы считалось правильно, а то значения теряться будут (округляться до int)
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
05.08.2014, 10:32     Составить функцию нахождения факториала #7
как вариант...
C++
1
2
3
4
unsigned long factorial(int x)
{
    return (x > 0) ? x * factorial(x - 1) : 1;
}
Andrej
И целого heap'а мало
93 / 54 / 9
Регистрация: 31.07.2014
Сообщений: 291
06.08.2014, 14:15     Составить функцию нахождения факториала #8
Если скучно, то можно убиться об метапограмированние =)
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 Factorial {
        const static long value = N * Factorial<N - 1>::value;
};
 
template <>
struct Factorial<0> {
        const static long value = 1;
};
 
int
main(int argc, char** argv)
{
        long factorial = Factorial<6>::value;
        std::cout << factorial << std::endl;
};
или об лямбды:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int
main(int argc, char** argv)
{
        auto factorial = [] (int N) -> long
            {
                    long result = 1;
                    do
                    {
                            result *= N;
                    }
                    while (--N);
 
                    return result;
            };
        std::cout << factorial(7) << std::endl;
};
делать было до того аж нечего
SatanaXIII
Супер-модератор
Эксперт С++
5588 / 2622 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
06.08.2014, 14:33     Составить функцию нахождения факториала #9
Цитата Сообщение от Avazart Посмотреть сообщение
Такую штуку лучше не вычислять через ф-цию.
Ну вы бы хоть объясняли почему, с чем связано. В трех словах.
Avazart
7062 / 5239 / 261
Регистрация: 10.12.2010
Сообщений: 23,037
Записей в блоге: 17
06.08.2014, 14:35     Составить функцию нахождения факториала #10
рекурсия, переполнение, Рекуррентные выражение
SatanaXIII
Супер-модератор
Эксперт С++
5588 / 2622 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
06.08.2014, 14:40     Составить функцию нахождения факториала #11
Avazart, я вообще так, на будущее.

И все равно кстати непонятно из той ссылки почему.
Avazart
7062 / 5239 / 261
Регистрация: 10.12.2010
Сообщений: 23,037
Записей в блоге: 17
06.08.2014, 14:59     Составить функцию нахождения факториала #12
Что не понятно, для начала нужно попробовать упростить выражение если это возможно.
Если нет то вероятно стоило бы отходить от рекурсии, ну или хотя бы свести локальные переменные (то что в стеке)
к минимуму.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2014, 15:06     Составить функцию нахождения факториала
Еще ссылки по теме:

C++ Составить функцию нахождения максимального элемента в диагонали матрицы, параллельной главной диагонали
Составить функцию для нахождения наименьшего нечетного натурального делителя C++
C++ Составить функцию нахождения
Написать рекурсивную функцию вычисления факториала C++
Реальзовать Функцию вычисления факториала числа C++

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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
5588 / 2622 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
06.08.2014, 15:06     Составить функцию нахождения факториала #13
Avazart, вот так бы сразу.
Yandex
Объявления
06.08.2014, 15:06     Составить функцию нахождения факториала
Ответ Создать тему
Опции темы

Текущее время: 20:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru