
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
★桁あふれ(オーバーフロー)しているはずです。
>PCの構造にそこまで詳しくないので、詳しい理由を教えてください。
↑
C言語の基礎(int型の範囲)に関して詳しくないだけですよ。PCじゃない。
解決策:
・40の階乗を求めるのではなく『r』の次から『n』までの掛け算を行います。
そして『n-r』の階乗で割れば良いでしょう。
つまりnCr、n=40、r=11の計算を工夫します。
nCr=(12 * 13 * … * 40) / (40 - 11)!
nCr=(12 * 13 * … * 40) / (1 * 2 * 3 * … * 11 * 12 * … * 29)
nCr=(30 * 31 * … * 40) / (1 * 2 * 3 * … * 11)
nCr=92279715720192000 / 39916800
nCr=2311801440
このようになります。
でも30~40を乗算すると 9.228×10^16乗となり unsigned long int 型でも計算不可能。
そこで unsigned long long int 型を使えば計算可能となります。
ただし、処理系によっては unsigned long long int 型が利用できない場合が
ありますので注意して下さい。
・以上。
この回答へのお礼
お礼日時:2008/02/01 12:01
最後の表示でunsigned long intの範囲で扱える値に収まっていればいいのではなくて、途中の計算値でもunsigned long intの範囲で扱える値を超えると
オーバーフローになるんですね。
みなさん返事ありがとうございます。
No.2
- 回答日時:
> 桁あふれではない
間違いなくそうだと確認しましたか?
40の階乗はunsigned long int型で扱える範囲を超えますので、
計算の手順(先に40の階乗を求めようとする、など)によっては
桁あふれします。
No.1
- 回答日時:
>値が表示されませんでした
何も表示されなかったんですか?
プログラムが明記されてないのでわかりませんが
答え自体は桁あふれしないと思いますが計算途中で
あふれてるとかはないですかね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
有効数字について 以前質問をし...
-
VB6.0での小数点の扱いについて
-
CRCの計算方法について
-
BCD・HEX・BINについて
-
VB.net Double と...
-
”/”を使わずに割り算したいんで...
-
除算を使わずに10で割りたい。
-
floatの有効桁数
-
c languageで 簡単な質問があ...
-
色の判定
-
2の補数について
-
三菱シーケンサ(Aシリーズ)で...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
#if 1 #elseの意味について
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
構造体の要素すべてに対する四...
-
Enterキーを押されたら次の処理...
-
2÷3などの余りについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
MATLABでの行列の全要素の和
-
除算を使わずに10で割りたい。
-
floatの有効桁数
-
”/”を使わずに割り算したいんで...
-
ExcelのINT関数の計算結果がお...
-
VBAでミリ秒まで出力する方法
-
VB6.0での小数点の扱いについて
-
Fortran において変数の定義
-
計算の丸め誤差の解消について
-
C言語について質問です。
-
CRCの計算方法について
おすすめ情報