• 締切済み

組み合わせ

aに100、bに20や2を入力すると プログラムが停止します。 計算できるように御指摘お願いします。 以下のプログラムです。 #include<stdio.h> int factrical(int n){ if(n>0){ /*printf("%d\n",n);*/ return (n*factrical(n-1)); } else{ return(1);} } int combination(int n ,int r){ return(factrical(n)/(factrical(n-r)*factrical(r))); } int main (void){ int a,b,c; printf("二つの数を入力してください。\n"); do{ printf("大きい方の数を入力してください。\n"); scanf("%d",&a); scanf("%d",&b); }while(a<b); c=combination(a,b); printf("%d",c); return(0);}

みんなの回答

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.2

factrical(100)はintでは表現できません。 今のようなアルゴリズムを使うのなら、任意精度の計算が出来るようなライブラリを使用してください。

situmonn9876
質問者

お礼

お返事ありがとうございます。

回答No.1

return(factrical(n)/(factrical(n-r)*factrical(r))); 100と2で開始すると、 factrical(n)=0 factrical(n-r)=0 factrical(r)=2 でここを通過するようですが、 0/(0*2) = 0/0 のため、値を0で割ることは出来ないというエラーで停止しているようです。 int a,b,c; a=factrical(n); b=factrical(n-r); c=factrical(r);    // 必要なら表示 こんな感じで、行を分けて、範囲チェックしてみると、問題点がわかるとは 思います。 #オマケ  私のほうは、これをGCCで実行しましたが、 fflush(stdout);  これをprintfなどの直後にはさむと、画面表示してから、  エラー落ちするようになるので、割とすぐ原因を見つけられます。 久々のCで楽しかったので!、サンクス

situmonn9876
質問者

お礼

問題点をわかりやすくするヒント、ありがとうございます。

関連するQ&A