アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語でファクト関数を使わずに階乗を計算する方法はありますか?できれば教えてください

A 回答 (4件)

既存の関数を使わないならば、数学上の定義を基に実装しましょう


https://ja.wikipedia.org/wiki/%E9%9A%8E%E4%B9%97

階乗の定義は三つあり
定義A)
n! = \prod_{k=1}^{n} k = 1 * 2 * ... * (n-1) * n
0! = 1
定義B)
n! = n*(n-1)! ... if n > 0
0! = 1
定義C)
n! = (d/dx)^n * x^n

それぞれの定義を実装すると

// 定義A
int a = 1;
for (k=1; k<=n; k++) a *= k;
return a;

// 定義B
int f(int n) { return (n > 0)? n * f(n-1): 1; }

// 定義C
int* a = (int*)malloc(sizeof(int)*(n+1)); // n次方程式の係数配列
for (i=0; i<n; i++) a[i] = 0;
a[n] = 1; // x^n だけ係数 1
for (k=n; k>0; k--) { // n次方程式をn回微分
_ for (i=0; i<k; i++) { // 微分するごとに次数が減る
_ _ a[i] = a[i+1] * (i+1);
_ }
}
int x = a[0]; // 最後に残った0次の係数が解
free(a);
return x;
    • good
    • 0

> C言語でファクト関数を使わずに階乗を計算する方法はありますか?



意味が分からんな。
そもそもC言語の仕様上、ファクト関数なんかねぇんとちゃうん?
っつーこたぁ、自作する、って事になるんだけど、ここで訊いてる事と噛み合わん。「無いもの」は「使えない」からだ。

あるいは、main関数内で他に作った関数を呼び出さずに階乗を計算したい、って事なの?
イマイチ意図が分からん質問だ。
    • good
    • 2

そうだね。


 For Next
 While
などのループで良いと思います。
    • good
    • 0

こんにちは



言語は関係ないと思いますが・・

指定数までループして乗算すれば良いのでは?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!