10신건

long형과int형 모두 32비트(+-2,147,483,646)의 범위의 값을 저장이 가능한데 20팩토리얼의 경우 이 저장범위를 넘어가기때문에

(20팩토리얼의 값은 2,432,902,008,176,640,000) 

오버플로우가 발생해서 -값이 나오는거지.

 

만약 더 큰 값을 저장하고싶으면 long long형 자료형을 사용하면 되는데 long long이라는 명령어는 gcc컴파일러에서 사용이 가능하고 visual c에서는 안된다네.

visual c에서는 __int64를 사용하면 64비트(+-18,446,744,073,709,551,615)의 범위의 값이 저장이 가능하고 변수선언은 __int64 fact = 1;

pirntf에서의 출력은 %I64d를 사용하면 된다는군.