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!で示される整数xのsomを取得する方法は、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

私のコードは他のコードほど良くありませんが、私にとってはうまくいきます:

#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 に答える
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 に答える