Как вычислить факториал х - PullRequest
2 голосов
/ 24 сентября 2010

как получить значение целого числа x, обозначенного x!, это произведение чисел от 1 до x.

Пример: 5! 1x2x3x4x5 = 120.

int a , b = 1, c = 1, d = 1; 
printf("geheel getal x = ");
scanf("%d", &a);
printf("%d! = ", a);
for(b = 1; b <= a; b++)
{
     printf("%d x ", c);
     c++;
     d = d*a;
}
printf(" = %d", d);

Ответы [ 7 ]

6 голосов
/ 24 сентября 2010

Вы можете просто сделать:

for(b = 1; b <= a; b++) {
  d *= b;
}
// d now has a!
6 голосов
/ 24 сентября 2010

как получить сом от целого числа x, обозначенного x !, это произведение чисел от 1 до x.

Вы имели в виду factorial от x?

Измените d = d*a; на d = d*b внутри цикла

5 голосов
/ 25 сентября 2010

Это оптимальная реализация по размеру и скорости:

int factorial(int x)
{
    static const int f[13] = { 1, 1, 2, 6, 24, 120, /* ... */ };
    if ((unsigned)x < (sizeof f/sizeof f[0])) return f[x];
    else return INT_MAX+1; /* or your favorite undefined behavior */
}

Подсказка: x! (x factorial) не помещается в int, за исключением очень очень маленьких значений x.

2 голосов
/ 24 сентября 2010

Попробуйте

d = d * b;

вместо

d = d * a

и должно работать нормально

0 голосов
/ 10 сентября 2017
int factorial(int x)
{
    int f;
    if (x == 0)
    {
        f = 1;
    }
    else if (x > 0)
    {
     f = x*factorial(x-1);
    }
    return f;
}

int main()
{
   int n = 0;
   cout << factorial(n);

   return 0;
}
0 голосов
/ 08 июня 2017

Мой код не так хорош, как другие, но он работает для меня:

#include <iostream>
using namespace std;

unsigned int fattoriale (int n){
    if (n == 1){
        return 1;
    }
    else {
        return n * fattoriale(n-1);
    }
}

int main() {
    int tmp, num;
    cin >> num;

    tmp = fattoriale(num);

    cout << "Stampo il fattoriale del numero inserito: " << tmp << endl;

}
0 голосов
/ 24 сентября 2010

У вас там действительно много избыточного кода, возможно, поэтому вы сами не обнаружили ошибку.

Для расчета факториала вам нужен только аккумулятор (d в приведенном выше коде) и вход (a).Почему?

...