十进制转化为二进制,采用的是“除以2求余数”的算法,就是将整数不断除以2,每次得到的余数就是由低到高的二进制
这个“除以2”的过程得到的余数是从低到高的次序,而输出则是从高到低,所以需要一个栈来反转次序。
十进制转化为二进制代码实现:
class Stack():
"""定义一个栈"""
def __init__(self):
self.items = []
def isEmpty(self):
return self.items() == []
def pop(self):
return self.items.pop()
def push(self, item):
return self.items.append(item)
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
def divideBy2(decNumber):
remstack = Stack()
while decNumber > 0:
rem = decNumber % 2 #求余数
remstack.push(rem)
decNumber = decNumber // 2 # 整数除
binString = ""
while not remstack.isEmpty():
binString = binString + remstack.pop()
return binString
如果是转化为八进制或十六进制呢,简单修改一下就可以了。
class Stack():
"""定义一个栈"""
def __init__(self):
self.items = []
def isEmpty(self):
return self.items() == []
def pop(self):
return self.items.pop()
def push(self, item):
return self.items.append(item)
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
def divideBy(decNumber, base):
digits = '0123456789ABCDEF'
remstack = Stack()
while decNumber > 0:
rem = decNumber % base #求余数
remstack.push(rem)
decNumber = decNumber // base # 整数除
binString = ""
while not remstack.isEmpty():
binString = binString + digits[remstack.pop()]
return binString
print(divideBy(35, 8))