Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вычислить n!-m!


Автор: wizard90 11.6.2009, 19:12
Собсно помогите написать программу для вычилсения факториала двух чисел

Автор: math64 11.6.2009, 19:50
Код

double difffact(int n, int m) {
double f = 1; nf, mf;
int i;
if (n == m)
  return 0.0;
for (i = 2; i <= n && i <= m; i++) f *= i;
nf = mf = f;
if (n > m) {
   for(; i <= n; i++) nf *= i;
} else {
   for(; i <= m; i++) mf *= i;
}
return nf - mf;
}

Автор: andrew_121 11.6.2009, 19:50
wizard90, Показывай что сделал.

Автор: azesmcar 11.6.2009, 19:58
wizard90

Ну это жутко сложно.

1. Факториал рекурсией
Код

#include<iostream>

unsigned int factorial(unsigned int n)
{
    if (n < 2)
        return 1;
    return n * factorial(n - 1);
}

int main ()
{
    std::cout << factorial(6) - factorial(4) << std::endl;
}

2. Факториал циклом
Код

#include<iostream>

unsigned int factorial(unsigned int n)
{
    for (int i = n - 1; i > 1; --i)
        n *= i;
    return (n == 0 ? 1 : n);
}

int main ()
{
    std::cout << factorial(6) - factorial(4) << std::endl;
}

3. Факториал во время компиляции
Код

#include<iostream>

template <unsigned int u>
struct factorial
{
    enum { result = u * factorial<u - 1>::result };
};

template <>
struct factorial<0>
{
    enum { result = 1 };
};

int main ()
{
    std::cout << factorial<6>::result - factorial<4>::result << std::endl;
}


хватит? есть еще хвостовая рекурсия, она очень модна среди любителей функционального программирования.

исправил имя переменной в первом примере, спасибо andrew_121 за внимательность

Автор: andrew_121 11.6.2009, 20:37
azesmcar, Прошу прошения, но в первом примере неувязочка - f, n

Автор: azesmcar 11.6.2009, 20:41
Цитата(andrew_121 @  11.6.2009,  20:37 Найти цитируемый пост)
azesmcar, Прошу прошения, но в первом примере неувязочка - f, n 

а, ну да..писал тут
исправил

Автор: wizard90 11.6.2009, 21:03
Спасиюо всем за несколько представленных примеров... разобрался. ТОлько мне нужно было чтобы чсла вводились с клавиатуры.

Автор: azesmcar 11.6.2009, 21:15
Код

#include<iostream>

unsigned int factorial(unsigned int n)
{
    for (int i = n - 1; i > 1; --i)
        n *= i;
    return (n == 0 ? 1 : n);
}

int main ()
{
    int m;
    int n;

    std::cout << "m = ";
    std::cin >> m;

    std::cout << "n = ";
    std::cin >> n;

    std::cout << factorial(m) - factorial(n) << std::endl;
}

Автор: zim22 11.6.2009, 21:28
azesmcar, факториал нуля равен единице smile

Автор: azesmcar 11.6.2009, 21:36
zim22
да будет так

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)