- ÇÔ¼ö¸í
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 Á¤¼ö¸¦ ´Ù¹èÀå Á¤¼ö·Î º¯È¯ÇÑ´Ù