读书人

进制转换。该怎么处理

发布时间: 2012-02-22 19:36:54 作者: rapoo

进制转换。。。
最近遇到一个题目。要输入一个整数,输出1~16任意过制数,不知道用C/C++怎么处理。
有哪位高手指点下...
谢谢了...

[解决办法]
源文:

C/C++ code
/****xtoa.c - convert integers/longs to ASCII string**       Copyright (c) 1989-1997, Microsoft Corporation. All rights reserved.**Purpose:*       The module has code to convert integers/longs to ASCII strings.  See********************************************************************************/#include <cruntime.h>#include <stdlib.h>#include <limits.h>/****char *_itoa, *_ltoa, *_ultoa(val, buf, radix) - convert binary int to ASCII*       string**Purpose:*       Converts an int to a character string.**Entry:*       val - number to be converted (int, long or unsigned long)*       int radix - base to convert into*       char *buf - ptr to buffer to place result**Exit:*       fills in space pointed to by buf with string result*       returns a pointer to this buffer**Exceptions:********************************************************************************//* helper routine that does the main job. */static void __cdecl xtoa (        unsigned long val,        char *buf,        unsigned radix,        int is_neg        ){        char *p;                /* pointer to traverse string */        char *firstdig;         /* pointer to first digit */        char temp;              /* temp char */        unsigned digval;        /* value of digit */        p = buf;        if (is_neg) {            /* negative, so output '-' and negate */            *p++ = '-';            val = (unsigned long)(-(long)val);        }        firstdig = p;           /* save pointer to first digit */        do {            digval = (unsigned) (val % radix);            val /= radix;       /* get next digit */            /* convert to ascii and store */            if (digval > 9)                *p++ = (char) (digval - 10 + 'a');  /* a letter */            else                *p++ = (char) (digval + '0');       /* a digit */        } while (val > 0);        /* We now have the digit of the number in the buffer, but in reverse           order.  Thus we reverse them now. */        *p-- = '\0';            /* terminate string; p points to last digit */        do {            temp = *p;            *p = *firstdig;            *firstdig = temp;   /* swap *p and *firstdig */            --p;            ++firstdig;         /* advance to next two digits */        } while (firstdig < p); /* repeat until halfway */}/* Actual functions just call conversion helper with neg flag set correctly,   and return pointer to buffer. */char * __cdecl _itoa (        int val,        char *buf,        int radix        ){        if (radix == 10 && val < 0)            xtoa((unsigned long)val, buf, radix, 1);        else            xtoa((unsigned long)(unsigned int)val, buf, radix, 0);        return buf;}char * __cdecl _ltoa (        long val,        char *buf,        int radix        ){        xtoa((unsigned long)val, buf, radix, (radix == 10 && val < 0));        return buf;}char * __cdecl _ultoa (        unsigned long val,        char *buf,        int radix        ){        xtoa(val, buf, radix, 0);        return buf;}#ifndef _NO_INT64static void __stdcall x64toa (      /* stdcall is faster and smaller... Might as well use it for the helper. */        unsigned __int64 val,        char *buf,        unsigned radix,        int is_neg        ){        char *p;                /* pointer to traverse string */        char *firstdig;         /* pointer to first digit */        char temp;              /* temp char */        unsigned digval;        /* value of digit */        p = buf;        if ( is_neg )        {            *p++ = '-';         /* negative, so output '-' and negate */            val = (unsigned __int64)(-(__int64)val);        }        firstdig = p;           /* save pointer to first digit */        do {            digval = (unsigned) (val % radix);            val /= radix;       /* get next digit */            /* convert to ascii and store */            if (digval > 9)                *p++ = (char) (digval - 10 + 'a');  /* a letter */            else                *p++ = (char) (digval + '0');       /* a digit */        } while (val > 0);        /* We now have the digit of the number in the buffer, but in reverse           order.  Thus we reverse them now. */        *p-- = '\0';            /* terminate string; p points to last digit */        do {            temp = *p;            *p = *firstdig;            *firstdig = temp;   /* swap *p and *firstdig */            --p;            ++firstdig;         /* advance to next two digits */        } while (firstdig < p); /* repeat until halfway */}/* Actual functions just call conversion helper with neg flag set correctly,   and return pointer to buffer. */char * __cdecl _i64toa (        __int64 val,        char *buf,        int radix        ){        x64toa((unsigned __int64)val, buf, radix, (radix == 10 && val < 0));        return buf;}char * __cdecl _ui64toa (        unsigned __int64 val,        char *buf,        int radix        ){        x64toa(val, buf, radix, 0);        return buf;}#endif  /* _NO_INT64 */ 

读书人网 >C++

热点推荐