2

如何得到一个整数的值,用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);
4

7 回答 7

6

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

你是说factorialx 吗?

切换d = d*a;d = d*b循环内

于 2010-09-24T10:41:23.687 回答
6

你可以简单地做:

for(b = 1; b <= a; b++) {
  d *= b;
}
// d now has a!
于 2010-09-24T10:42:07.790 回答
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)不适合 int,除了非常非常小的值x

于 2010-09-25T01:17:07.160 回答
2

尝试

d = d * b;

代替

d = d * a

它应该可以正常工作

于 2010-09-24T10:42:11.753 回答
0

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

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

于 2010-09-24T11:20:09.083 回答
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;
}
于 2017-09-10T18:05:22.750 回答
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;

}
于 2017-06-08T16:03:49.307 回答