十进制 --> 其他进制

转二进制:

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