1 条题解

  • 0
    @ 2026-4-12 9:16:30

    十六进制转十进制(10位以内)

    这道题非常简单,10位十六进制数可以直接用 unsigned long long 存储,直接逐位计算即可。

    C++ 实现代码

    #include <iostream>
    #include <string>
    #include <cctype>
    using namespace std;
    
    int main() {
        string hex;
        cin >> hex;
        
        // 用 64 位整数存储结果,足够存 10 位十六进制数
        unsigned long long dec = 0;
        
        for (int i = 0; i < hex.size(); i++) {
            char c = hex[i];
            int num;
            
            // 转换当前位为数字
            if (isdigit(c)) {
                num = c - '0';
            } else {
                // 大写字母 A-F 转 10-15
                num = toupper(c) - 'A' + 10;
            }
            
            // 核心公式:dec = dec * 16 + 当前位数字
            dec = dec * 16 + num;
        }
        
        cout << dec << endl;
        return 0;
    }
    

    核心原理

    1. 逐位计算 从左到右遍历每一位: 十进制 = 十进制 * 16 + 当前位数字
    2. 字符转数字
      • 0-9 → 直接转数字
      • A-F/a-f → 转成 10-15
    3. 数据类型 unsigned long long 可以轻松容纳10位十六进制数

    测试示例

    输入:

    2ECF
    

    输出:

    11983
    

    总结

    1. 10位十六进制 → 用 unsigned long long 完全足够
    2. 核心公式:dec = dec * 16 + 当前位
    3. 代码简洁、直接、无坑,可直接提交
    • 1

    信息

    ID
    749
    时间
    1000ms
    内存
    16MiB
    难度
    10
    标签
    递交数
    5
    已通过
    4
    上传者