如何计算x的阶乘

时间:2010-09-24 10:38:03

标签: c operators factorial

如何获取由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 个答案:

答案 0 :(得分:6)

  

如何获得整数x的som,由x!表示,是数字1到x的乘积。

你的意思是factorial的x?

在循环内将d = d*a;更改为d = d*b

答案 1 :(得分:6)

您可以这样做:

for(b = 1; b <= a; b++) {
  d *= b;
}
// d now has a!

答案 2 :(得分:5)

这是尺寸和速度的最佳实现:

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的值非常小。

答案 3 :(得分:2)

尝试

d = d * b;

而不是

d = d * a

它应该可以正常工作

答案 4 :(得分:0)

你实际上有很多冗余代码,这可能就是你自己没有发现错误的原因。

要计算阶乘,您只需要累加器(上面代码中为d)和输入(a)。为什么呢?

答案 5 :(得分:0)

我的代码与其他代码不一样,但它对我有用:

#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;

}

答案 6 :(得分:0)

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