**数字系统转换器**
2026 华为OD机试真题 7月26日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
在一个特殊的数学系统中,每个数字都有其独特的表示方式。给定两个不同的数字字符集和一个数字字符串,你需要将这个数字从一个字符系统转换到另一个字符系统。实现一个函数,将使用源字符集表示的数字转换为使用目标字符集表示的数字。
2026 华为OD机试真题 7月26日华为OD上机新系统考试真题 100 分题型
补充说明
- 1≤num.length≤100
- 2≤sourceDigits.length≤36
- 2≤targetDigits.length≤36
sourceDigits和targetDigits由不同的字符组成,且不包含重复字符num中的所有字符都存在于sourceDigits中- 输入保证是有效的,不会出现非法字符
- 转换结果不应包含前导零,除非数字本身就是 0
示例1
输入
101,01,0123456789
输出
5
说明
解释: 二进制
"101"转换为十进制是"5"
示例2
输入
ff,0123456789abcdef,0123456789
输出
255
说明
解释: 十六进制
"ff"转换为十进制是"255"
示例3
输入
100,01,0123456789abcdef
输出
4
说明
解释: 二进制
"100"转换为十六进制是"4"
示例4
输入
7,0123456789,01
输出
111
说明
解释: 十进制
"7"转换为二进制是"111"
示例5
输入
10012,01234,012
输出
212102
说明
解释: 五进制
"10012"转换为三进制是"212102"
解题思路
核心思想
最直观的方法是先把 num 转成十进制整数,再转成目标进制。但 num.length 最大为 100,数值可能非常大,部分语言的普通整数会溢出。
更通用的做法是直接做“进制长除法”:把 num 按源字符集转换成源进制下的数字数组,然后反复用目标进制的基数去除这个大数。每次除法得到的余数,就是目标进制从低位到高位的一个数字。
算法步骤
- 按示例格式读取一行输入,用英文逗号切分出
num、sourceDigits、targetDigits。 - 建立源字符到数值的映射,例如
sourceDigits[i]的值为i。 - 将
num转成源进制数字数组。 - 如果数组表示的数值为 0,直接输出
targetDigits[0]。 - 当数字数组不为空时,执行一次大数除以
targetBase:- 从高位到低位处理,维护当前余数。
- 商的前导 0 不保留。
- 本轮最终余数就是目标进制的一位。
- 重复除法直到商为空,将得到的余数对应字符反转后输出。
复杂度分析
设 L 为输入数字长度,目标表示长度为 R。
- 每次除法最多扫描当前数字数组一遍,时间复杂度为
O(L * R)。 - 需要保存当前数字数组和结果数组,空间复杂度为 `O(L +
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/751
文章版权归作者所有,未经允许请勿转载。
THE END