"""补充练习:在二、八、十、十六进制之间进行任意方向转换。 输入:数值字符串(十六进制可用 A-F)、原进制、目标进制;进制均为 2、8、10、16。 学习说明: - to_base() 将非负十进制整数转成目标进制;divmod() 每次给出商和余数。 - 余数对应当前最低位,因此收集后要倒序;数字字母表支持十六进制的 A 到 F。 - int(text, source_base) 是 Python 提供的输入解析方式,先把原进制数值转成整数。 - 转换到目标进制时调用自己写的 to_base(),练习“除基取余”算法。 """ DIGITS = "0123456789ABCDEF" def to_base(number, base): # 用字符表把余数 0~15 转换成相应的数字符号。 if number == 0: return "0" result = [] while number: number, remainder = divmod(number, base) result.append(DIGITS[remainder]) return "".join(reversed(result)) text = input().strip() source_base, target_base = map(int, input().split()) valid_bases = {2, 8, 10, 16} if source_base not in valid_bases or target_base not in valid_bases: raise ValueError("进制只能是 2、8、10 或 16") value = int(text, source_base) if value < 0: raise ValueError("本练习只处理非负整数") print(to_base(value, target_base))