実現したいこと
与えられた n に対するカタラン数 C_n を出力するプログラムを作りたいです。
n はコマンドライン引数として与えられます。
(n = 0, 1) C_n = 1
(n>=2) C_n = Σ_{i=0}^{n-1} (C[i] * C[n-i-1])
コード
C
#include <stdio.h> #include <stdlib.h> int ni(int x) { int a, result = 1; for(a = 1; a < 2*x + 1; ++a) { result *= a; } return result; } int kai(int y) { int b, result = 1; for(b = 1; b < y + 2; ++b) { result *= b; } return result; } int fact(int z) { int c, result = 1; for(c = 1; c < z + 1; ++c) { result *= c; } return result; } int main(int argc, char *argv[]) { int n; n = atoi(argv[1]); if (n == 0) { printf("%d\n", 1); } else { printf("%d\n", ni(n)/kai(n)/fact(n)); } return 0 ; }
カタラン数C_n = (2n)!/(n+1)!n!で求めることができるので、初めに一つ一つの値を求めて、最後に式に当てはめるようにしました。
発生した問題
n = 6までは正しく求められていますが、 n = 7以降から違う値が出るようになりました。どこが原因なのかどうか教えてください。
C
./a.out 1 1 ./a.out 2 2 ./a.out 3 5 ./a.out 4 14 ./a.out 5 42 ./a.out 6 132 ./a.out 7 6 ./a.out 8 0 ./a.out 9 0
まだ回答がついていません
会員登録して回答してみよう