
No.3ベストアンサー
- 回答日時:
既存の関数を使わないならば、数学上の定義を基に実装しましょう
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;
No.4
- 回答日時:
> C言語でファクト関数を使わずに階乗を計算する方法はありますか?
意味が分からんな。
そもそもC言語の仕様上、ファクト関数なんかねぇんとちゃうん?
っつーこたぁ、自作する、って事になるんだけど、ここで訊いてる事と噛み合わん。「無いもの」は「使えない」からだ。
あるいは、main関数内で他に作った関数を呼び出さずに階乗を計算したい、って事なの?
イマイチ意図が分からん質問だ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
vb.netです。2次元配列の要素を...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
VBA Boxが空白の場合のメッセー...
-
一巡伝達関数と開ループ伝達関数
-
アクティブセルから、A列最終行...
-
CやJAVa,Rubyなどプログラミン...
-
イベントの発生を待つ
-
EXCEL VBA ユーザーフォームの...
-
VBAでの一時停止と再開の方法
-
システム安定性(ゲイン余裕/...
-
Do whileでExitせず、ループの...
-
配列にaaaからzzzまでの17576(2...
-
Excel VBAで、アクティブシート...
-
c#の for文について質問です。 ...
-
vbscriptでIE自動入力(途中で...
-
C言語でファクト関数を使わずに...
-
ループの途中でユーザーからの...
-
UWSCに制限時間を付けたいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
CSVファイルの特定の行だけを読...
-
範囲指定したセルを1つずつ飛...
-
UWSCに制限時間を付けたいです
-
Escキーを押すと、中断する時と...
-
乱数の桁数指定、または範囲指定。
-
VBA for i=1 to lastrow
-
流れ図(フローチャート)が分か...
-
DOSコマンドのループ内のTIMEコ...
-
pythonでファイルのコメント行...
-
素数表について。
-
VBAでの一時停止と再開の方法
-
「偶数・奇数の和」のフローチ...
-
DoEventsが必要な理由について
-
vb.netです。2次元配列の要素を...
-
Do whileでExitせず、ループの...
-
ループフリー
-
エクセルの当番表を作っていま...
-
VBAで3秒だけ時間を止めたい
おすすめ情報