题目
从标准输入读入一个非负十进制整数,将其转换为大写十六进制字符串并在控制台输出。
输入格式:一行输入一个非负整数 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