练习 3-5
编写函数 itob(n, s, b),将整数 n 转换为以 b 为底的数,并将转换结果
以字符的形式保存到字符串 s 中。例如,itob(n, s, 16)把整数 n 格式化成十六进制整数
保存在 s 中。
这个和3-4差不多,但是要处理大于10的数。
void itob(int n, char s[], int b)
{
int i, sign, num;
i = 0;
sign = n;
do
{
if (sign < 0)
num = -(n % b);
else
num = n % b;
if (num < 10)
s[i++] = num + '0';
else //大于10要替换成字母
s[i++] = num - 10 + 'a';
} while ((n /= b) != 0);
if (sign < 0)
s[i++] = '-';
s[i++] = '\0';
reverse(s);
}
完整代码 :
/*练习 3-5 编写函数 itob(n, s, b),将整数 n 转换为以 b 为底的数,并将转换结果
以字符的形式保存到字符串 s 中。例如,itob(n, s, 16)把整数 n 格式化成十六进制整数
保存在 s 中。*/
#include <stdio.h>
void itob(int n, char s[], int b);
void reverse(char s[]);
main()
{
int n, b;
char s[1024];
n = -123;
b = 16;
itob(n, s, b);
printf("%s\n", s);
}
void itob(int n, char s[], int b)
{
int i, sign, num;
i = 0;
sign = n;
do
{
if (sign < 0)
num = -(n % b);
else
num = n % b;
if (num < 10)
s[i++] = num + '0';
else //大于10要替换成字母
s[i++] = num - 10 + 'a';
} while ((n /= b) != 0);
if (sign < 0)
s[i++] = '-';
s[i++] = '\0';
reverse(s);
}
void reverse(char s[])
{
int i, j, c;
for (j = 0; s[j] != '\0'; j++)
;
for (i = 0, j--; i < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}