Python 实现十进制转换有多种方法,一般情况下用得最多的还是使用自带的方法来进行转换。那么如何让数字从十进制转为二进制呢?
# 假设我们十进制数字是 10
dec = 10
#使用 bin() 从十进制转为二进制
print(bin(10)) # 输出结果是 0b1010
# 使用 oct() 从十进制转为八进制
print(oct(dec)) # 输出结果是 0o12
# 使用 hex() 从十进制转为十六进制
print(hex(dec)) # 输出结果是 0xa
以上是直接使用python自带的方法,当然我们可以从数学的角度来实现进制转换。
这里我们使用栈这种数据结构来实现进制转换。
名为 stackExample.py 的文件
# 栈数据结构
class Stack():
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def isEmpty(self):
return True if self.items == [] else False
def size(self):
return len(self.items)
def __str__(self):
return str(self.items)
名为 decNumberConverter.py 的文件
from stackExample import *
def decNumberConverter(decNum, base):
""" 十进制转任意进制 """
digits = "0123456789ABCDEF"
s = Stack()
n = decNum
# 入栈
while n != 0:
s.push(n%base)
n = n // base
res = ""
# 出栈
while s.isEmpty() == False:
res += digits[s.pop()]
return res
print(decNumberConverter(255, 16))
还有一种方法是使用递归来实现。
# 用递归实现十进制转任意进制算法
def decNumConverter(decNum, base):
convertString = "0123456789ABCDEF"
if decNum < base:
return convertString[decNum]
else:
return decNumConverter(decNum // base, base) + convertString[decNum % base]