非常詳細和簡潔的任意進制轉換(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’
在這裏插入圖片描述

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	
	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章