以下のソースコードを実行すると、標準出力には何と表示されるでしょうか?
#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 件のコメント:
コメントを投稿