题目

从标准输入读入一个非负十进制整数,将其转换为大写十六进制字符串并在控制台输出。

输入格式:一行输入一个非负整数 n。

输出格式:输出大写十六进制字符串(如 255 对应 FF),末尾换行。

数据范围与约定:0 ≤ n ≤ 2×109。

思路与算法

1. 十六进制字符映射
余数 r = n % 16:若 r < 10 映射为 '0' + r;若 r ≥ 10 映射为 'A' + (r - 10)。

2. 逆序输出
同样采用除 16 取余、逆序排列的逻辑,直到 n == 0。0 特判输出 0。

完整程序

#include <stdio.h>

// 将 0~15 的数值映射为十六进制字符
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;

    // 每 4 个二进制位对应 1 位十六进制,用 0xF 掩码提取
    while (n) {
        s[len++] = hex_digit(n & 0xFu);
        n >>= 4;
    }

    // 倒序输出
    while (len--) {
        putchar(s[len]);
    }
    putchar('\n');
    return 0;
}

运行示例

输入:

255

输出:

ff