- 締切済み
組み合わせ
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);}
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- f272
- ベストアンサー率46% (8467/18126)
factrical(100)はintでは表現できません。 今のようなアルゴリズムを使うのなら、任意精度の計算が出来るようなライブラリを使用してください。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
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で楽しかったので!、サンクス
お礼
問題点をわかりやすくするヒント、ありがとうございます。
お礼
お返事ありがとうございます。