2014-04-04 66 views
-2

我試圖將一個數字從小數轉換爲基數6,反之亦然,但它不工作。看來我並沒有搞清楚算法是否能夠正常工作。有人能向我解釋如何在Python中實現它嗎?在Python中將base 6轉換爲decimal,反之亦然?

這是一個鏈接(Click here),它給出瞭解釋如何做,但是當我嘗試使用while循環在Python中創建它,但它不工作,並且變成一個無限循環。最後,我不明白我將如何將所有剩下的東西加在一起形成最終價值。

由於

回答

1

我希望這將幫助你更

def dec2hex(num): 
    if num == 0: 
     return 0 
    ans = "" 
    while num > 0: 
     ans = str(num%6) + ans 
     num /= 6 
    return int(ans) 

def hex2dec(num): 
    if num == 0: 
     return 0 
    num = str(num) 
    ans = int(num[0]) 
    for i in num[1:]: 
     ans *= 6 
     ans += int(i) 
    return ans 

if __name__ == '__main__': 
    a = dec2hex(78) 
    b = hex2dec(a) 
    print a, b 

輸出爲:

210 78 
+1

我不會使用'hex'這個名字 - 通常你會想到16位的基數。 – glglgl

0

一個方向是明確的:

>>> int('42', 6) 
26 

另一種方法 - 將數字轉換到基座6表示 - 是棘手。似乎沒有辦法使用內置函數並且沒有循環。

所以,一個可以做類似

def str_base(val, base): 
    res = '' 
    while val > 0: 
     res = str(val % base) + res 
     # val /= base # only valid for Py2 
     val //= base # for getting integer division 
    if res: return res 
    return '0' 

這使得例如爲:

>>> str_base(7,6) 
'11' 

截至目前,它僅適用於基地< = 10;換了別人你需要定義一個字母串:

import string 
alphabet = string.digits + string.ascii_lowercase 

,並用它在功能上類似

res = alphabet[val % base] + res 

它(可能)仍然沒有負數工作。如果你需要這些,你必須再加一點努力。

+0

你會怎麼做呢? –

+0

-glglgl我在str_base函數中嘗試7,6時得到了這個: 它太長了,但它是這樣的:1.5e-3238e-3234.9e-3222.945 ... –

+0

@Sab查看我的編輯。 – glglgl

相關問題