非常详细和简洁的任意进制转换(python实现)

最近笔试面试也遇到这种进制转换的题,来总结一下!

任意进制转换为10进制

举例:
二进制:1101
转为十进制为:从最低位(从左到右)开始遍历,1 * 2^0 + 0 * 2^1 + 1 * 2^2 + 1 * 2^3 = 1 +0 + 4 + 8 = 13

三进制:2101
转为10进制为:1 * 3^0 + 0 * 3^1 + 1 * 3^2 + 2 * 3^3 = 1 + 0 + 9 + 54 = 64

总结出规律,从低位到高位,每一位乘以权重,再相加,权重是进制的位数次方

def anyToTen(m, origin):
	# m: int 
	# origin:str
	# return: int
    # 任意进制的数转换为10机制
    # 直接利用int的自带功能
    return int(str(origin), base = m) # origin必须是字符串啊

或者使用公式进行计算:

def anyToTen(m, origin):
    # 任意进制的数转换为10机制
    # 先将m转换为10进制
    # 公式 num = an * m**(n-1) + an-1 * m**(n-2).....+ a0 * m**0
    n = len(origin)
    res = 0
    for i in range(len(origin)):
    	res += int(origin[i]) * pow(m, n-i-1)
    return res    

十进制转化为任意进制

举例:
十进制:124
二进制:通过辗转相除取余法,过程如下
当然,转化为10以上进制时,需要用字母来表示,比如10用’A’
非常详细和简洁的任意进制转换(python实现)_第1张图片

def trans_map(cint):
	# cint: int
	# return: str
	# 把数字转化为相应字符,比如10-a, 11-b
    if cint < 0:
        return None
    elif cint < 10: # 数字转为字母
        return str(cint)

    elif cint >= 10: #  ASCII码转为字母A-Z
        return chr(cint - 10 + 65)

def tenToAny(n, origin):
    # n进制: int
    # origin: int
    # return: str
    res = ''
    while origin:
        res = trans_map(origin % n) + res  # 需要逆序
        origin = origin // n  # 一定要整除,不然除3会进入死循环

    return res	
	

你可能感兴趣的:(leetcode总结,进制转换,任意进制)