아래의 소스는 윈도우에서
Luna MinGW & GNU C 4.5.0 (gcc),
로 테스트되었다. long 타입으로는 13! 까지만 정확하계 계산되지만 GMP 를 이용한 계산은 아무리 큰 수의 곱셈이라도 정확히 계산해준다.
- 윈도우에 Luna MinGW (with GCC 4.5.0) 설치하기:
1) Luna MinGW 홈페이지(MinGW GCC C/C++ Compiler package with installer)
2) Luna MinGW 설치파일 다운로드
* 소스 파일명: recFactGMP01.c
* Filename: recFactGMP01.c
*
* Compile: gcc -o recFactGMP01 recFactGMP01.c -lgmp
*/
#include <stdio.h>
#include <gmp.h>
void factorial(mpz_t v, int n) {
int i;
mpz_t t;
mpz_init (t);
mpz_init_set_str (v, "1", 0);
for (i = 1; i <= n; i++) {
mpz_init_set_si (t, i);
mpz_mul(v, v, t);
}
}
int main(int argc, char *argv[]) {
int n1 = 9;
int n2 = 30;
int i;
mpz_t v;
mpz_init (v);
for (i = n1; i <= n2; i++) {
mpz_init_set_si (v, 1);
factorial(v, i);
gmp_printf("%d! = %Zd\n", i, v);
if (i == 13)
printf("-- below calc are regular ----\n");
}
return 0;
}
실행 결과:
프롬프트> recFactGMP01
9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 6227020800
-- below calc are regular ----
14! = 87178291200
15! = 1307674368000
16! = 20922789888000
17! = 355687428096000
18! = 6402373705728000
19! = 121645100408832000
20! = 2432902008176640000
21! = 51090942171709440000
22! = 1124000727777607680000
23! = 25852016738884976640000
24! = 620448401733239439360000
25! = 15511210043330985984000000
26! = 403291461126605635584000000
27! = 10888869450418352160768000000
28! = 304888344611713860501504000000
29! = 8841761993739701954543616000000
30! = 265252859812191058636308480000000
'프로그래밍 > C' 카테고리의 다른 글
long long 타입의 정수 계산을 100경 까지 테스트하는 C 소스 (0) | 2012.04.28 |
---|---|
ISOC99 를 지원하는 C 컴파일러로 복소수 계산하는 C 예제 (0) | 2012.04.28 |
C 언어의 long 타입으로 계산 가능한 최대 팩토리얼은? (0) | 2010.08.11 |
스트링 배열 정렬(sorting)하기 with C (0) | 2009.04.17 |
손으로 계산하는 긴 자리 곱셈표 만들기 with C (0) | 2009.03.07 |