回顾💫
上节我们学习了栈的应用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))
运行结果: