프로그래밍

 3198, 1/160 회원가입  로그인  
   alswovkdlxj
   n!을 구하는 코드

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3004 [복사]


#include<stdio.h>
int main(void)
{
int a=0,b=1,c=1;
printf("n!을 구한다 n=");
scanf("%d",&a);
for(;b<a+1;b++)
{
c=c*b;
}
printf("n!=%f \n",(double)c);
return 0;
}
이라는 코드를 짯는데 31까지는 제대로된 값이 나오는데
32~33은 마이너스값이 나오고 34이상은 0이 나오는데
자료형에 따른 값의 한계인가요?

  Hit : 4628     Date : 2011/05/16 01:03



    
sdc04303 for문 ;앞에 빠진게 b=0이면 잘못된건 없는것 같음데요...
아닌가..
2011/05/16  
clockmaker 30! 이상이라면 아마 자료형의 한계일 것 같네요.
long int를 써 보시든가
아니면 int 2개를 이어 붙이는 방식으로 코드를 짜 보시면 될 것 같습니다.
2011/05/16  
열정 30!이상이면 아마 자료형의 한계가 되서 그런것 같은데 문자렬처리를 하든가 배렬을 이용하여 계산하여야 합니다. 2011/05/16  
U_SoRang 팩토리얼은... 재귀함수를 사용하시는게...ㅎㅎ 2011/05/16  
alswovkdlxj 재귀함수가 뭐지요.. 이제막 for문까지 한터라서.. 열혈강의에서 예제 햇는데 100! 부터 해봣는데 0이 나오더라구요.. ㄷ 2011/05/16  
clockmaker 열혈강의 보고 계시면, 재귀함수 정도는 책 맨 뒤의 index 찾아보시면 있겠네요. 2011/05/16  
endosymbiosis 1. for문을 명확하게 이해하지 못하셨습니다.

for(초기값 설정 ; 조건문 확인 ; 증가문)
{
실행
}

여기서 for문 실행될 때, 초기값 설정 -> 조건문 확인 -> 실행 -> 증가문 이런 식으로 진행되는데,
위에 주어진 a=0, b=1; 을 대입한다면,
for( ; b<a+1; b++) -> for(b=1;b<1;b++) 인데 for문 제어에서 바로 빠져나올 것입니다.
초기값 설정 -> 조건문 확인 끝.

for 문을 명확하게 사용하셔야 합니다.

2. 자료형이 몇 byte인지 명확하게 모르시는 것 같습니다. 자료형을 확인하시고, 일치되게 사용하셔야 합니다.

3. (double)c 는 의미없는 행동입니다. 8byte이기 때문에 쓴 것이라면 처음부터 double c=1; 하시면
되는 것이 아닐까요?
2011/06/04