제가 팩토리얼의 숫자를 구할려고하는데요,
12!까지는 정상숫자가 나오거든요, 그런데 13!부터가 이상하게 뜨더니
34!부터는 0이뜨네요 이것의 정확한 이유를 설명해주세요 부탁드립니다.
------------------------------------------------------------------------
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600 4억8천만
13!=6227020800 62억 // 32비트 정수로는 최대 2십억 까지 밖에 나타내지 못합니다.
14!=87178291200 8백7십억 // 따라서 제대로 표현할 수가 없습니다.
15!=1307674368000 1조3천억
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
21!=51090942171709440000
22!=1124000727777607680000
23!=25852016738884976640000
24!=620448401733239439360000
25!=15511210043330985984000000
26!=403291461126605635584000000
27!=10888869450418352160768000000
28!=304888344611713860501504000000
29!=8841761993739701954543616000000
30!=265252859812191058636308480000000
31!=8222838654177922817725562880000000
32!=263130836933693530167218012160000000
33!=8683317618811886495518194401280000000
34!=295232799039604140847618609643520000000
=2^32*3^15*5^7*7^4*11^2*13^2*17^2*19^1*23^1*29*1*31^1
으로 소인수 분해가 된다. 따라서 2진수로 나타낸다면 0이 32개 나오게 된다.
그래서 32비트 정수로 34!를 나타내면 0이 되는 것이다.
'c·c++ > c 프로그래밍' 카테고리의 다른 글
일억 이천 삼백 사십 오 만 육천 칠백 팔십 구 (0) | 2012.05.17 |
---|---|
codepad is an online compiler/interpreter (0) | 2012.05.16 |
kbhit (0) | 2012.05.16 |
몇가지 함수들 (0) | 2012.05.14 |
C컴파일러가 양수와 음수를 메모리에 저장하는 방식 그 이유 (0) | 2012.05.14 |