题解 | 进制转换
进制转换
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()
查看12道真题和解析
