프로그래밍

 3198, 1/160 회원가입  로그인  
   gmlthd0908
   1부터 100까지의 곱에 대한 자료형 문젠데요...ㅠㅠ

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


#include <stdio.h>

double fact(double);

int main(void)
{
        int n;
        
        for(n=1;n<101;n++)
        printf("%2d=%10ld\n",n,fact(n));
        
        return 0;
}

double fact(double i)
{
        if (i==0) //종료 조건
                return 1L;
        else //재귀 호출
                return (i*fact(i-1));        
}


디버깅은 오류 없이 잘 되는데
결과화면에서 1부터 13까지 값이 0 으로 나와요...
자료형 문젠 거 같아서요ㅠㅠ 어떻게 해야되죠??...
int로하면 13부터 0이나오고
double로하면 1부터 13값이 0이 나오고...

  Hit : 7069     Date : 2014/12/06 12:15



    
skyclad1975 main 에서 fact 함수로 인자를 넘길 때 double 값으로 받도록 되어 있는데 int 형인 n을 넣고 있네요
일단 n을 double로 바꾸시고 컴파일해보세요. printf 내부에서 %2lf로 바꿔주시는 거 잊지 마시고,
그리고 fact 함수가 리턴하는 값은 double 형인데 printf에서는 ld형으로 받고 있네요 이부분도 고쳐주시고...

#include <stdio.h>

double fact(double);

int main(void)
{
double n;

for(n=1;n<101;n++)
printf("%2lf = %.lf\n",n,fact(n));

return 0;
}

double fact(double i)
{
if (i==0) //종료 조건
return 1L;
else //재귀 호출
return (i*fact(i-1));
}

제대로 실행되도록 바꾼 코드입니다
2014/12/07  
menial 설계가 잘못된 것 같네여
문제에 대한 분석에서 1에서부터 100까지의 곱이라면 정수값이 나오는 것이 아닙니까?
단지 그 결과값이 범위를 넘어선다면 모를까 이미 그 결과값은 정수값이 되겠지요.
double은 실수입니다. 실수가 들어와야 하는 이유를 고민해야 합니다.
2018/11/21  
cd80 결과변수를 unsigned long long으로 선언해보세요
1 * 2 * ~~ * 13 == 6227020800 62억인데
32비트 int에서는 4294967296, 43억까지밖에 표현 못합니다
2018/11/23