编写函数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);
}
3-5 编写函数itob(n,s,b)。
最新推荐文章于 2021-12-05 16:16:56 发布