进制转换算法

411 阅读1分钟

1. 进制转换

对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。 image.png

核心代码:(目前只可以用于2-9进制转换)

def test(num, j):
    ret = []
    while True:
        m = num % j
        ret.insert(0, str(m))
        num = num // j
        if num == 0:
            break
    return ''.join(ret)


if __name__ == '__main__':
    print(test(1000, 2))

核心代码: 可以接受2-36位进制转换

import string


def get_unit_dict():
    ret = {}
    for ind, val in enumerate(list(string.digits + string.ascii_lowercase)):
        ret[ind] = val
    return ret


def hc(num, j):
    # 2 - 36 进制
    if not isinstance(j, int):
        raise ValueError("类型错误")
    if j < 2 or j > 36:
        raise ValueError("进制只能是2-36")
    unit_dict = get_unit_dict()
    ret = []
    while True:
        n = num % j
        ret.insert(0, unit_dict[n])
        num //= j
        if num == 0:
            break
    return "".join(ret)


if __name__ == '__main__':
    print(hc(10000, 36))