´Ù¹èÀå Á¤¼ö¸¦ long Á¤¼ö·Î º¯È¯ÇÑ´Ù


ÇÔ¼ö¸í
mpNum2Long  ´Ù¹èÀå Á¤¼ö¸¦ long Á¤¼ö·Î º¯È¯ÇÑ´Ù
Çü½Ä
int mpNum2Long(unsigned long *ul, int *num);
Àμö
ul   (Ãâ·Â) ´ëÀÀÇÑ ºÎÈ£ ¾øÀ½ long Á¤¼ö
num  (ÀÔ·Â) ´Ù¹èÀå Á¤¼ö
ÇÔ¼öÄ¡
º¯È¯ÇÒ ¼ö ¾ø¾úÀ» ¶§´Â -1, OK ½Ã´Â 0.
ÁÖÀÇ »çÇ×
´Ù¹èÀå Á¤¼öÀÇ ¹è¿­ÀÇ °¢ ¿ä¼Ò ai(i ´Â 1 ÀÌ»ó)´Â 1¾î¸¦ ³ªÅ¸³», 1¾î·Î ³ªÅ¸³¾ ¼ö ÀÖ´Â ÃÖ´ëÀÇ Á¤¼ö´Â 9999 ·Î ÇÑ´Ù. ¸»ÀÇ ±æÀÌ´Â a0 ÀÇ °ªÀ¸·Î ³ªÅ¸³½´Ù. Áï, ´Ù¹èÀå Á¤¼ö´Â
anKn-1+ an-1Kn-2+...+a2K+ a1
±×¸®°í Ç¥ÇöÇÑ´Ù. ´Ù¸¸, K=10000, n=a0.

¿ë·Ê(mpNum2Long-test.c )

ÇÁ·Î±×·¥(mpNum2Long.c )
#define N 10000

int mpNum2Long(unsigned long *ul, int *num)
{
    unsigned long maxUL, maxULdivN;
    unsigned long x;
    int      *nn;

    maxUL = ~0;
    maxULdivN = maxUL / N;

    x = 0;
    for (nn = num + *num; nn ! = num; ) {
        if (x > maxULdivN) return -1;
        x *= N;
        if (*nn > maxUL - x) return -1;
        x += *nn--;
    }
    *ul = x;

    return 0;
}
¼³¸í
º¯È¯ÇÏ°í ½ÍÀº ´Ù¹èÀå Á¤¼ö°¡, ÃÖ´ëÀÇ ºÎÈ£ ¾øÀ½ long Á¤¼öº¸´Ù Å©´Ù °æ¿ì´Â, º¯È¯ ºÒ°¡·Î ÇÑ´Ù.

°ü·Ã ÇÔ¼ö
´Ù¹èÀå Á¤¼öÀÇ °¡»ê, ´Ù¹èÀå Á¤¼öÀÇ °¨»ê, ´Ù¹èÀå Á¤¼öÀÇ °ö¼À, ´Ù¹èÀå Á¤¼öÀÇ Á¦»ê, ´Ù¹èÀå Á¤¼öÀÇ Æò¹æ±Ù, ´Ù¹èÀå Á¤¼öÀÇ ´ë¼Ò ºñ±³, ¼ö¿­À» ´Ù¹èÀå Á¤¼ö·Î º¯È¯ÇÏ´Â, ´Ù¹èÀå Á¤¼ö¸¦ ¼ö¿­·Î º¯È¯ÇÏ´Â, long Á¤¼ö¸¦ ´Ù¹èÀå Á¤¼ö·Î º¯È¯ÇÑ´Ù