일반 펙토리얼을 계산하는걸 만들었는데...
2011.04.19 13:52
#include<stdio.h>
int main(void)
{
long fact = 1;
int i, n;
printf("정수를입력하시오:");
scanf("%d", &n);
for(i=1; i<=n; i++)
fact=fact*i;
printf("%d!은 %d입니다. \n", n, fact);
return 0;
}
이렇게 만들었는데
작은 숫자를 쓰면 괜찮은데
20을 쓰면 -가 나와요
왜 그런가요?
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 31 | windows 체험 지수에 대해서 [2] | 10박태수 | 2011.06.21 | 480 |
| 30 | 객체지향 프로그래밍이 머에요? [5] | 11김덕인 | 2011.05.27 | 352 |
| 29 | 초딩 6학년 여자아이와 1시간반동안 할 것들 [3] | 11정규리 | 2011.05.13 | 596 |
| 28 | 후니형에게 술을 얻어마셔야 하는데 [2] | 10신건 | 2011.04.28 | 402 |
| 27 | 웹프로그래밍중 질문인데요 [2] | 07최윤수 | 2011.04.28 | 495 |
| 26 | printf scanf [1] | 10김시형 | 2011.04.25 | 427 |
| » | 펙토리얼을 계산하는걸 만들었는데... [1] | 11이은정 | 2011.04.19 | 672 |
| 24 | 갑자기 컴퓨터에서 복사 붙여넣기가 안되요 [7] | 06한훈 | 2011.04.18 | 2595 |
| 23 |
비쥬얼 스튜디오 2005를 실행하려는데
[4] | 06한훈 | 2011.04.05 | 524 |
| 22 | 영국이는 f를 받았는데 왜 장학금을 탈까요? [5] | 10이광기 | 2011.03.28 | 476 |
| 21 | 관리부께 질문드립니다. [1] | 10김승만 | 2011.03.28 | 416 |
| 20 | 안드로이드 debug.keystore [7] | 08이혜린 | 2011.03.27 | 1569 |
| 19 | 재밌는 거를 올려주세요. [2] | 10김승만 | 2011.03.23 | 429 |
| 18 | 박태수씨한테 역 질문합니다 [3] | 07권효준 | 2011.03.23 | 661 |
| 17 | 어뷰징이 무엇 인가요? [1] | 09김흥열 | 2011.03.23 | 408 |
| 16 | 쿠폰. [3] | 10홍창석 | 2011.03.17 | 586 |
| 15 | 저 동방 문 어떻게 잠가요? [1] | 09김흥열 | 2011.03.17 | 545 |
| 14 | 도토리 1000개 받으려면?? [2] | '09안두헌 | 2011.03.17 | 495 |
| 13 | 빨래할때 왜 먼지들이 그렇게....... [6] | 11정규리 | 2011.03.16 | 608 |
| 12 | 프로그래밍 오류좀 잡아주세영.. [4] | 06권영삼 | 2011.03.15 | 395 |




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를 사용하면 된다는군.