Search on the blog

2014年2月6日木曜日

100! = 0 ?


 以下のソースコードを実行すると、標準出力には何と表示されるでしょうか?
#include <iostream>
#include <stack>

using namespace std;

unsigned long long fuctorial(int n) {
    return n == 0 ? 1 : n * fuctorial(n-1);
}

int main() {
    cout << fuctorial(100) << endl;

    return 0;
}
タイトルに書いてあるのであれですが、0と表示されます。

えっ!?こんな偶然あるの?

と思いましたが、100!を素因数分解すると素因数2の指数は64より大きくなるので、まあそうなりますね。

ちなみに、
65/2+ 65/4 + 65/8 + 65/16 + 65/32 + 65/64 = 63
66/2+ 66/4 + 66/8 + 66/16 + 66/32 + 66/64 = 64

なので、66!からunsigned long longで表現すると0になります。

0 件のコメント:

コメントを投稿