题目
十进制转十六进制字符串输出
思路
本题把十进制整数转成十六进制字符串(小写 a~f)。
反复取最低四位:digit = n % 16,再 n /= 16,直到 n 为 0。余数 10~15 用字母 a~f 表示,先收集各位再逆序输出才是高位在前。
解题分析
除 16 取余映射 0-9a-f,逆序输出。与二进制转换同一框架,基数换成 16。
完整程序
#include <stdio.h>
static char hex_digit(unsigned v)
{
return (char)(v < 10 ? '0' + v : 'a' + v - 10);
}
int main(void)
{
unsigned n;
if (scanf("%u", &n) != 1) {
return 1;
}
if (n == 0) {
printf("0\n");
return 0;
}
char s[9];
int len = 0;
while (n) {
s[len++] = hex_digit(n & 0xFu);
n >>= 4;
}
while (len--) {
putchar(s[len]);
}
putchar('\n');
return 0;
}
运行示例
输入:
255输出:
ff