°è½Â n! ÀÇ »êÃâ


ÇÔ¼ö¸í
factorial  °è½Ân! ÀÇ °ªÀ» ´ÙÀÚ¸®¼ö·Î »êÃâÇÑ´Ù
Çü½Ä
int factorial(int *data, int n);
Àμö
data  (Ãâ·Â) n! ÀÇ °ªÀÌ 10Áø 4ÀÚ¸®¼ö¾¿ µé¾î°£ Á¤¼öÀÇ ¹è¿­
n     (ÀÔ·Â) °è½ÂnÀÇ °ª
ÇÔ¼öÄ¡
¹è¿­ data¿¡ °è»ê°ªÀÌ µé¾î¿Â ¿ä¼ÒÀÇ ¼ö(¹è¿­ÀÇ ¼±µÎ·ÎºÎÅÍ)
ÁÖÀÇ »çÇ×

¿ë·Ê(factorial-test.c )
int data[1000];
factorial(data, 1000);

1000! ÀÇ °ª

ÇÁ·Î±×·¥(factorial.c )
int factorial(int *data, int n)
{
    int  i, j;
    int  last;
    int  *dap, *dap2;
    int  t;
    long x;
    
    *data = 1;
    last = 0;
    for (i = 1; i <= n; i++) {
        t = 0;
        for (j = 0, dap = data; j <= last; j++) {
            x = *dap;
            x = x * i + t;
            *dap++ = x % 10000;
            t = x / 10000;
        }
        if (t ! = 0) {
            *dap = t;
            last++;
        }
    }
    
    for (dap = data, dap2 = data + last; dap < dap2; dap++, dap2--) {
        t     = *dap;
        *dap  = *dap2;
        *dap2 = t;
    }
    return last + 1;
}
¼³¸í
°è½ÂÀ» ¿ÂÀüÈ÷ 1 x 2 x 3...x n ¿Í °è»êÇØ ³ª°¡¸é(ÀÚ), »ó´çÇÑ ÄÄÇ»ÅÍ ±×·¸Áö¸¸, °ð¹Ù·Î ¿À¹öÇ÷οì ÇØ ¹ö¸°´Ù.

n! ÀÇ ÀÚ¸®¼ö´Â ½ºÅиµÀÇ ±Ù»ç½Ä n! = nne-n (2n¥ð)1/2º¸´Ù ,
¡¡¡¡¡¡n log10(n/e) + (log10(2n¥ð)/2+1
±×¸®°í ¿ä±¸µÈ´Ù.

°ü·Ã ÇÔ¼ö