• 締切済み

C言語で困っています。

正の整数を入れたときに、階乗を求めるプログラムを作りたいのですが、 ↓のプログラムを起動させたら、最終的な答えが1(kaizyo=1)になって、非常に困っています。 何故なのでしょうか?それと、どこを直せばいいですか? #include<stdio.h> main() { int x; int kaizyo=1; printf("整数を入力して下さい:"); scanf("%d",&x); if(x<=0) { printf("値が不適当です。"); } else { while(x<1) { kaizyo=kaizyo*x; x=x-1; } printf("%dの階乗は%dです。",x,kaizyo); } }

みんなの回答

回答No.4

既に解決しているのかな。 階乗の場合、結果が整数範囲を越えて大きくなる可能性があるのでそれは検出して結果に反映した方が良さそうに感じました。 今のままだと値が大きすぎて計算できてなくても計算できたものとして計算結果とは全く違う値を表示する事になりそうです。

  • furlough
  • ベストアンサー率100% (1/1)
回答No.3

while文は条件が真の時にループするから、 while (x > 1) が正解かと。

hurryup0117
質問者

お礼

助かりました。一気に問題が解決しました。

  • bx2
  • ベストアンサー率47% (97/206)
回答No.2

ぱっと見、「while(x<1)」が「while(x>1)」の間違いだと思います。

hurryup0117
質問者

お礼

コメントありがとうございます。非常に参考になりました。

回答No.1

https://ideone.com/Hn6lw 俺としては早めにreturnしたほうが好きだけれども。 https://ideone.com/h6HTB

hurryup0117
質問者

お礼

詳しく教えて頂き、非常に参考になりました。

関連するQ&A

専門家に質問してみよう