题目

十进制转十六进制字符串输出

思路

本题把十进制整数转成十六进制字符串(小写 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