ページ 11

1~50までの数字をかける

Posted: 2010年5月07日(金) 00:23
by 愛川
お久しぶりですが、質問させていただきます。
1×2×3×…×50の計算を行うプログラムを作っています。
プログラムは以下のようになり、エラーも出ないのですが、
実行すると「0」が出力されてしまいます。
どこか間違っている点、直したほうが良い点がありましたら教えていただきたいです。
よろしくお願いいたします。
OSはWindows XP、Visual C++を使用しています。
#include<stdio.h>
int main(void){
    int s = 1, c;
    for(c = 1; c < 51; c++){
        s = s * c;
    }
        printf("%d\n", s);
        return(0);
}
画像

Re:1~50までの数字をかける

Posted: 2010年5月07日(金) 00:43
by たかぎ
処理系不明なので正確なことはいえませんが...

50!の計算結果を格納するには、ふつうint型では役不足です。
double型やlong double型なら表現範囲としてはOKですが、ふつう有効桁が足りません。
有効桁数をどう考えるかにもよりますが、多倍長演算が必要になると思います。

ところで、50!と決まっているのであれば、これは実質的に定数ですね。
それであれば、机上で計算して、文字列を出力するだけにするのもひとつの手です。
というか、静的に値が求まるのであれば、そうすべきです。

Re:1~50までの数字をかける

Posted: 2010年5月07日(金) 00:50
by 愛川
ありがとうございます。
double型にしたらできました。 画像

Re:1~50までの数字をかける

Posted: 2010年5月07日(金) 00:58
by たかぎ
> double型にしたらできました。

本当にそれでいいんですか?