実現したいこと
与えられた 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
1#include <stdio.h> 2#include <stdlib.h> 3 4int ni(int x) { 5 int a, result = 1; 6 for(a = 1; a < 2*x + 1; ++a) { result *= a; } 7 return result; 8 } 9int kai(int y) { 10 int b, result = 1; 11 for(b = 1; b < y + 2; ++b) { result *= b; } 12 return result; 13 } 14int fact(int z) { 15 int c, result = 1; 16 for(c = 1; c < z + 1; ++c) { result *= c; } 17 return result; 18 } 19int main(int argc, char *argv[]) { 20 int n; 21 n = atoi(argv[1]); 22if (n == 0) { 23 printf("%d\n", 1); 24 } else { 25 printf("%d\n", ni(n)/kai(n)/fact(n)); 26 } 27return 0 ; 28} 29
カタラン数C_n = (2n)!/(n+1)!n!で求めることができるので、初めに一つ一つの値を求めて、最後に式に当てはめるようにしました。
発生した問題
n = 6までは正しく求められていますが、 n = 7以降から違う値が出るようになりました。どこが原因なのかどうか教えてください。
C
1 ./a.out 1 21 3 ./a.out 2 42 5 ./a.out 3 65 7 ./a.out 4 814 9 ./a.out 5 1042 11 ./a.out 6 12132 13 ./a.out 7 146 15 ./a.out 8 160 17 ./a.out 9 180 19
回答2件
あなたの回答
tips
プレビュー