그래도 답해 드리자면...
Factorial의 정의는 그림과 같고요,
C언어로 구현하면 다음과 같이 하면 됩니다.
몇십 팩토리얼만 넘어가도 엄청나게 큰 수가 되는 데,
이때는 다음과 같이 log() 함수를 사용하여
덧셈으로 바꾼 후에 계산하면 됩니다.
double factorial(int n)
{
if (n < 70) { // 몇십에서 나눠야 하는 지는 잘 모르겠네요. ^^; 실험해 보세요.
long retval = 1; // 빌더라면 long(32bit) 대신 __int64 타입을 쓰면 64bit 정수형을 쓸 수 있습니다.
int i;
for (i = 1; i <= n; i++)
retval *= i;
return retval;
} else
return exp(logfactorial(n));
}
double logfactorial(int n)
{
double retval = 0.0;
int i;
for (i = 1; i <= n; i++)
retval += log(i);
return retval;
}
|