top1编程
← 返回题目
题解

【入门】十六进制转十进制

1 条题解

  • 0
    @ 2026-7-31 12:11:14

    解题思路

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

    方法:按位展开。

    十六进制转十进制,就是把每一位的数值乘以对应的 16 的幂次再相加:

    个位 × 16⁰,十位 × 16¹,百位 × 16²……

    步骤:

    1. 用 t 记录当前位的权重,从 1(16⁰)开始
    2. 从最低位(字符串末尾)往最高位扫:
      • 如果是数字字符 '0'~'9',值就是 s[i] - '0'
      • 如果是字母 'A'~'F',值就是 s[i] + 10 - 'A'(A 是 10,B 是 11……F 是 15)
      • 这一位的值 × t,累加到结果 r
      • t 乘 16,变成下一位的权重
    3. 输出 r

    举例 十六进制 2ECF:

    • F=15,C=12,E=14,2=2
    • 2×16³ + 14×16² + 12×16 + 15 = 8192 + 3584 + 192 + 15 = 11983

    参考代码

    #include <iostream>
    #include <string>
    #include <cctype>
    using namespace std;
    
    int main() {
        string s;
        long long r = 0, t = 1;
        cin >> s;
    
        for (int i = s.size() - 1; i >= 0; i--) {
            if (isdigit(s[i])) {
                r += (s[i] - '0') * t;      // 数字 0~9
            } else {
                r += (s[i] + 10 - 'A') * t;  // 字母 A~F 转 10~15
            }
            t = t * 16;
        }
    
        cout << r;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),N 为位数
    • 空间复杂度:O(1)
    • 1