进制转换
十进制 --> 其他进制
转二进制:
def to_bin(n):
"""
将十进制整数转换为二进制字符串表示
参数:
n (int): 待转换的十进制整数,必须为非负整数
返回:
str: 对应的二进制字符串,不包含前缀
"""
if n == 0:
return '0'
res = ''
while n > 0:
res = str(n % 2) + res
n //= 2
return res转八进制:
def to_oct(n):
"""
将十进制整数转换为八进制字符串表示
参数:
n (int): 待转换的十进制整数,必须为非负整数
返回:
str: 对应的八进制字符串,不包含前缀
"""
if n == 0:
return '0'
res = ''
while n > 0:
res = str(n % 8) + res
n //= 8
return res转十六进制:
def to_hex(n):
"""
将十进制整数转换为十六进制字符串表示
参数:
n (int): 待转换的十进制整数,必须为非负整数
返回:
str: 对应的十六进制字符串,使用大写字母 A-F,不包含前缀
"""
if n == 0:
return '0'
digits = '0123456789ABCDEF'
res = ''
while n > 0:
res = digits[n % 16] + res
n //= 16
return res不难发现其中的规律,我们对n取余加在结果前面,再对n进行整除,因此我们可以设计一个通用进制转换函数,但仅限十六进制以内(含)
十进制转任意进制(≤ 16):
def to_base(n, base):
"""将十进制数n转换为base进制(2 ≤ base ≤ 16)"""
if n == 0:
return "0"
digits = "0123456789ABCDEF"
res = ""
while n > 0:
res = digits[n % base] + res
n //= base
return res其他进制 --> 十进制
使用Python内置的库进行转换:
# 二进制 --> 十进制
num = '1001'
print(int(num, 2))
# 四进制 --> 十进制
num = '123'
print(int(num, 4))
# 六进制 --> 十进制
num = '12345'
print(int(num, 6))
# 八进制 --> 十进制
num = '1234567'
print(int(num, 8))
# 十六进制 --> 十进制
num = '12345678ABC'
print(int(num, 16))
# 三十六进制 --> 十进制
num = '12345'
print(int(num, 36))使用内置库,需要注意范围:2 ≤ num ≤ 36