📅  最后修改于: 2023-12-03 14:58:37.031000             🧑  作者: Mango
本题为“门|门CS 2010”比赛的第 62 题,题目名称为“进制数”。
本题要求参赛者编写一个程序,将一个数字转换为特定进制的表达形式。具体要求如下:
对于任意整数 $n$,可以通过不断对 $n$ 取模、除以 $k$ 的方式,得到它在 $k$ 进制下的表达形式,每一位即为 $n$ 取模 $k$ 的结果。需要注意以下几点:
根据以上思路,可以编写如下的 Python 代码:
def to_k_base(n: int, k: int) -> str:
if n == 0:
return "0"
if n < 0:
n = -n
sign = "-"
else:
sign = ""
res = ""
while n:
n, mod = divmod(n, k)
if mod < 10:
res += str(mod)
else:
res += chr(ord("A") + mod - 10)
return sign + res[::-1]
可以使用以下测试样例对上述代码进行验证:
assert to_k_base(123456, 16) == "1E240"
assert to_k_base(123456, 10) == "123456"
assert to_k_base(-123456, 16) == "-1E240"
assert to_k_base(-123456, 10) == "-123456"
assert to_k_base(0, 16) == "0"