现在的位置: 首页 > 综合 > 正文

3-5 编写函数itob(n,s,b)。

2013年10月01日 ⁄ 综合 ⁄ 共 875字 ⁄ 字号 评论关闭
编写函数itob(n,s,b)将整数n转换为以b为底的数。 并将转换结果以字符的形式保存到字符串s中。
1.  主要是这两句:
    char digits[] = "0123456789abcdef";
   还有
   s[i++] = digits[n % b];
让下标和对应进制的底数对应起来。

void itob(int n, char s[], int b)
{
    int i;
    char digits[] = "0123456789abcdef";
    i = 0;
//    do
//    {
//        s[i++] = n % b + '0';
//        if((c=s[i])> 9)
//           s[i]=c+('a'-10); //将10--15转化成'a'--'f'
//    }
//    while(n /= b);
    /*reply from csdner's*/
    do
    {
        s[i++] = digits[n % b];
    }while(n /= b);
        s[i] = '\0';
    reverse(s);
}
2. From Answer Book
主要是do-while部分加了条件表达式,很简练。
    do
    {
        j = n % b;
        s[i++] = (j <= 9) ? j + '0' : j + 'a' - 10;
    }
    while((n /= b) > 0);
3.  英文版答案
/* Stores a string representation of integer n
in s[], using a numerical base of b. Will handle
up to base-36 before we run out of digits to use. */
void itob(int n, char s[], int b) {
static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i, sign;
if ( b < 2 || b > 36 ) {
fprintf(stderr, "EX3_5: Cannot support base %d\n", b);
exit(EXIT_FAILURE);
}
if ((sign = n) < 0)
n = -n;
i = 0;
do {
s[i++] = digits[n % b];
} while ((n /= b) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
【上篇】
【下篇】

抱歉!评论已关闭.