創建baseConverter行數接受一個進制數和2~16的基數作為參數,處理方式是將余數壓入棧中,知道被處理的值為0.以2~10為基
數時,最多只需要10個數字,因此0~9這10個整數夠用。當基數超過10時,就會遇到問題。不能再直接使用余數,這是因為余數本身
就是兩位的十進制數。因此,需要創建一套數字來表示大於9的余數。
一種解決方法是添加一些字母字符到數字中,例如,十六進制使用10個數字以及前6個字母來代表16位數字。在代碼中,為了實
現這一方法,第3行創建了一個數字字符串來存儲對應位置上的數字。0在位置0,1在位置1,A在位置10,B在位置11,依次類推。當
從棧中移除一個余數時,它可以被用作訪問數字下標,對應的數字會被添加到結果中。如果從棧中移除的余數是13,那么字母D將被
添加到結果字符串的最后。
1 from pythonds.basic import Stack 2 def baseConverter(decNumber,base): 3 digits = "0123456789ABCDEF" 4 5 remstack = Stack() 6 7 while decNumber > 0: 8 rem = decNumber % base 9 remstack.push(rem) 10 decNumber = decNumber // base 11 12 newString = "" 13 while not remstack.isEmpty(): 14 newString = newString + digits[remstack.pop()] 15 16 return newString