c·c++/c 프로그래밍

일정숫자를 넘기면 제대로 출력이 안되는 이유

바로이순간 2012. 5. 16. 13:32

 제가 팩토리얼의 숫자를 구할려고하는데요,

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이 되는 것이다.