编写函数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)。
最新推荐文章于 2026-06-05 09:09:40 发布
本文介绍了一个用于将整数转换为指定进制(最高支持36进制)的字符串表示形式的函数itob。提供了两种实现方式,一种通过直接映射到字符数组digits,另一种则使用条件表达式来简化代码。
。&spm=1001.2101.3001.5002&articleId=8191926&d=1&t=3&u=d6d7c0245a704b78817b886b2b33e356)
1万+

被折叠的 条评论
为什么被折叠?



