write in front
大家好,我是Aileen.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
本文由Aileen_0v0 原创 CSDN首发 如需转载还请通知⚠️
个人主页:Aileen_0v0—CSDN博客
欢迎各位→点赞 + 收藏⭐️ + 留言
系列专栏:Aileen_0v0的数据结构与算法学习系列专栏——CSDN博客
我的格言:"没有罗马,那就自己创造罗马~"
目录
编辑
回顾
十进制转换为二进制
十进制转换为任意进制
回顾
上节我们学习了栈的应用1---括号的匹配,如果有遗忘或者感兴趣的小伙伴可以点击链接http://t.csdnimg.cn/2ba3D
二进制 是计算机原理最基本的概念, 作为组成计算机最基本部件的逻辑门电路,其输入和输出均仅为两种状态: 0 和 1
但十进制是人类传统文化最基本的数值概念,如果没有进制之间的转换,人们跟计算机的交互会相当困难
class Stack:#Stack---->ADT
def __init__(self):
self.items =[]
def isEmpty(self):
return 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 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 + str(remstack.pop())
return binString
print(divideBy2(254))
运行结果:
从上面的十进制转二进制我们可以拓展到更多的进制转换
十进制转换为二进制的算法, 很容易可以拓展到转换到任意N进制
只需要将 "除以2求余数" 算法改为 "除以N求余数"算法即可
计算机中另外常用的两种进制 : 八进制和十六进制
如何表示八进制和十六进制
class Stack:#Stack---->ADT
def __init__(self):
self.items =[]
def isEmpty(self):
return 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 size(self):
return len(self.items)
def baseConverter(decNumber,base):
digits = "0123456789ABCDEF"
remstack = Stack()
while decNumber > 0 :
#求余数
rem = decNumber % base
remstack.push(rem)
#整数除
decNumber = decNumber // base
newString = ""
while not remstack.isEmpty():
newString = newString + digits[remstack.pop()]
return newString
print(baseConverter(25,2))
print(baseConverter(25,16))
运行结果: