正の整数を入れたときに、階乗を求めるプログラムを作りたいのですが、
↓のプログラムを起動させたら、最終的な答えが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);
}
}

このQ&Aに関連する最新のQ&A

0の階乗」に関するQ&A: 0の階乗は1?

A 回答 (4件)

既に解決しているのかな。


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

while文は条件が真の時にループするから、



while (x > 1)

が正解かと。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/04/22 05:05

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2011/04/22 05:06

https://ideone.com/Hn6lw

俺としては早めにreturnしたほうが好きだけれども。
https://ideone.com/h6HTB
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/04/22 05:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング