题解 | 进制转换

进制转换

https://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
【代码能力描述】
本程序是一个进制转换程序,主要功能是:
1. 从标准输入读取十六进制数(以 0x 开头)
2. 将十六进制转换为十进制并输出

【核心技能点】
- sys.stdin.read() - 读取标准输入
- str.strip() - 去除首尾空白
- list() - 字符串转列表
- 列表切片 - 删除元素
- 列表反转 - [::-1]
- 字典映射 - 字符到数值的映射
- for 循环遍历 - 逐位计算
- 幂运算 ** - 计算 16 的 i 次方

【题目要求】
- 输入:十六进制数(如 0xFA93)
- 输出:对应的十进制整数
- 十六进制字符:0-9, A-F(分别对应 10-15)
"""

# ========== 导入标准库 ==========
import sys  # 导入 sys 模块,用于访问标准输入输出

# ========== 定义主函数 ==========
def solve():
    """
    将十六进制数转换为十进制数

    【处理流程】
    1. 读取输入的十六进制字符串(如 "0xFA93")
    2. 去除 "0x" 前缀
    3. 将字符反转(从右往左计算)
    4. 逐位乘以 16 的幂次并累加

    【转换原理】
    例如:0xFA93
    - 从右往左:3, 9, A, F
    - 第0位:3 × 16^0 = 3
    - 第1位:9 × 16^1 = 144
    - 第2位:A(10) × 16^2 = 2560
    - 第3位:F(15) × 16^3 = 61440
    - 总和:3 + 144 + 2560 + 61440 = 64147
    """

    # ========== 第1步:定义十六进制字符到数值的映射字典 ==========
    # 十六进制的 0-9 直接对应 0-9
    # A-F 分别对应 10-15
    num_dict = {
        "0": 0,
        "1": 1,
        "2": 2,
        "3": 3,
        "4": 4,
        "5": 5,
        "6": 6,
        "7": 7,
        "8": 8,
        "9": 9,
        "A": 10,  # 十六进制 A = 十进制 10
        "B": 11,  # 十六进制 B = 十进制 11
        "C": 12,  # 十六进制 C = 十进制 12
        "D": 13,  # 十六进制 D = 十进制 13
        "E": 14,  # 十六进制 E = 十进制 14
        "F": 15,  # 十六进制 F = 十进制 15
    }

    # ========== 第2步:读取输入 ==========
    # sys.stdin.read() 读取所有输入
    # .strip() 去除首尾空白(包括换行符)
    # 例如输入 "0xFA93" -> d_16_str = "0xFA93"
    d_16_str = sys.stdin.read().strip()

    # ========== 第3步:处理字符串 ==========
    # 将字符串转换为字符列表
    # 例如 "0xFA93" -> ['0', 'x', 'F', 'A', '9', '3']
    d_16_lis = list(d_16_str)

    # 删除前两个字符(即 "0x" 前缀)
    # del d_16_lis[:2] 删除索引 0 和 1 的元素
    # 例如 ['0', 'x', 'F', 'A', '9', '3'] -> ['F', 'A', '9', '3']
    del d_16_lis[:2]

    # 将列表反转,实现从右往左计算
    # [::-1] 是 Python 切片语法,表示反转列表
    # 例如 ['F', 'A', '9', '3'] -> ['3', '9', 'A', 'F']
    rev_d_16_list = d_16_lis[::-1]

    # ========== 第4步:计算十进制值 ==========

    # 初始化幂次计数器(从 0 开始)
    i = 0

    # 初始化十进制结果累加器
    d_10 = 0

    # 遍历反转后的每一位十六进制字符
    for j in rev_d_16_list:
        # 通过字典获取当前字符对应的数值
        # 例如 j = '3' -> num_dict['3'] = 3
        # 计算当前位对十进制的贡献:数值 × 16的i次方
        # 累加到结果中
        d_10 = d_10 + num_dict[j] * (16 ** i)

        # 幂次计数器加 1,处理下一位
        i += 1

    # ========== 第5步:输出结果 ==========
    # 打印计算得到的十进制数
    print(d_10)


# ========== 程序入口 ==========
# 当直接运行此脚本时(而非被导入时),执行 solve() 函数
if __name__ == "__main__":
    solve()



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务