创建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