許せない心理テスト

c言語初心者です。
13までの階乗の値を計算するプログラムを下のように書いたのですが、

#include <stdio.h>

main()
{
int N, fact;

fact=1;
for(N=1; N<=13; ++N){
fact=fact*N;
printf("%d!=%d\n",N, fact);
}
}

このプログラムを実行してみると、12!までは正しい値が出力されるのですが、13!の値が1932053504と出力され、計算機の値と違います。

どこが間違っているのでしょうか。どなたかご教授お願いします。

A 回答 (2件)

fact を int 宣言しているので、 4byte 変数です。



12! = 479001600 = 0x1C8CFC00
13! = 6227020800 = 0x017328CC00

 このように、13! 以上は、4byte を超えてしまいます。

 従って、4byte を超えた分が無視されて、


13! = 6227020800 = 0x017328CC00
(4byte分のみ)==> 0x7328CC00 = 1932053504

 という結果です。
    • good
    • 0
この回答へのお礼

やっと謎が解けました。

ありがとうございます。

お礼日時:2009/10/27 19:43

>int N, fact;



これを
char N, fact;
にしてたら、もっと早く問題に気付いたかも。
    • good
    • 0
この回答へのお礼

おっしゃる通りですね。
あまりにintばかり使っていたもので・・・

ご回答ありがとうございます。

お礼日時:2009/10/27 19:45

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


おすすめ情報