top1编程
← 返回题目
题解

【入门】正整数n转换为16进制

1 条题解

  • 0
    @ 2026-7-31 12:10:16

    解题思路

    题目要求把十进制数转换成十六进制数。数字最长 18 位,要用 long long。

    方法:除 16 取余,倒序排列。

    十进制转十六进制,和转八进制类似,就是不断除以 16,记下余数,最后倒序写出来。

    步骤:

    1. 用 x 除以 16,得到余数(0~15)
    2. 余数转成十六进制字符:0~9 转数字,10~15 转 A~F
    3. x 变成 x÷16
    4. 重复,直到 x 变成 0
    5. 把余数从后往前拼成结果

    怎么转 A~F? 十六进制里 10 是 A、11 是 B……15 是 F。所以余数 10 转成 A 就是:n + 'A' - 10。

    特殊情况: 如果输入就是 0,直接输出 0。

    举例 60 转十六进制:

    • 60÷16=3 余 12 → 12 是 C
    • 3÷16=0 余 3 → 3 是 3
    • 倒序:3C

    参考代码

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string s;
        long long x;
        cin >> x;
    
        while (x != 0) {
            int n = x % 16;
            char c;
            if (n > 10) c = n + 'A' - 10;  // 10~15 转 A~F
            else c = n + '0';              // 0~9 转数字
            s = c + s;
            x = x / 16;
        }
    
        if (s == "") cout << 0;  // 0 的特殊情况
        else cout << s;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(log N),每次除以 16
    • 空间复杂度:O(log N),存结果字符串
    • 1