|
안녕하세요 스페로 입니다.
일반적인 팩토리얼 함수를 이런식으로 구합니다.
재귀 호출 (recusive)
#include <stdio.h>
#include <conio.h>
int factorial(int a);
int main()
{
printf("%d",factorial(8));
getch();
return 0;
}
int factorial(int a)
{
if (a <=1 )
return 1;
else
return a * factorial(a - 1);
}
8!는 40320
도스에서 정수 -32768 ~ +32767 범위를 초과하는 것 같습니다.
위소스를 C++빌더 콘솔위자드에서는 아무런 문제가 없군요
32비트 컴파일러를 이용해야 될겉 같습니다.
또는 터보C에서 unsigned short 나 long으로 해보시면 될듯 합니다.
+범위로만 되면 두배 범위가 되기때문에 ..
해보셨는데도 안된다면...
다시한번 태스트 해보세요
제가 터보C가 없는 관계로
32비트 컴파일러에서는 그냥 int로 8!정도는 무난합니다.
병아리~ 님이 쓰신 글 :
: C programming수업을 듣구 있는데요..
:
: 첫번째 과제루..(Turbo C를 이용하구여..)
:
: 임의의 값을 입력받아 n!을 구하는 건데여..
:
: 아직 배운게 별루 없어서여..제멋대루 함 짜봤는데..
:
: 이게..8!이 넘어가면 이상한 값이 나오네여..(음수나..0 등과같은..)
:
: 제가 한건..
:
: #include<stdio.h>
: int main(void)
: {
: int i, any_num;
:
: printf("Type any number : n = ");
: scanf("%d", &any_num);
: if (any_num==0)
: printf("n! = 1\n");
: else
: {
: for(i=any_num-1; i>0; i--)
: any_num *=i;
: printf("n! = %d\n", any_num);
: }
: return 0;
: }
:
: 이건데요...좀 무식해 보이긴 하지만... 나름대루 해봤는데..
:
: 혹시 변수타입때문인가 해서..unsinged나 long,, double로도 해봤는데..안되더군여..
:
: 왜 안되는건지..어떻게 하면 좀더 큰수까지 팩토리얼을 구할수있는지..
:
: 아주 큰수를 입력하면 결과가 이상할거 같긴 한데..8!부터 안되는건 좀 이상해서여..
:
: 그리고..또 어떻게 하면 좀더 예쁘게(깔끔하게) 짤수 있는지..조언부탁드릴께여..
:
: 감사합니다..^^
|