python栈应用十进制转二进制_python数据结构 -栈(2) 十进制转2、8、16进制

本文介绍了如何使用Python栈数据结构将十进制数转换为二进制、八进制和十六进制。通过除以2的算法,将整数不断除以2并记录余数,然后利用栈的特性构造二进制表示。同理,可以扩展到八进制和十六进制转换,处理十六进制时需注意字符映射。
摘要由CSDN通过智能技术生成

在你学习计算机的过程中,你可能已经接触了二进制。二进制在计算机科学中是很重要的,因为存储在计算机内的所有值都是以

0

1

存储的。如果没有能力在二进制数和普通字符串之间转换,我们与计算机之间的交互非常棘手。

整数值是常见的数据项。他们一直用于计算机程序和计算。我们在数学课上学习它们,当然最后用十进制或者基数

10

来表示它们。十进制

233^10

以及对应的二进制表示

11101001^2

分别解释为

2 * 10^2 + 3 * 10^1 +3 *10^0

1*2^7 + 1*2^6+1*2^5…..+1*2^0

“除2”算法假定我们从大于0的整数开始。不断迭代的将十进制除以2,并跟踪余数。第一个除以2的余数说明了这个值是偶数还是奇数。偶数有0的余数,记为0。奇数有余数1,记为1.我们将得到的二进制构建为数字序列,第一个余数实际上是序列中的最后一个数字。见我们再次看到了反转的属性,表示栈可能是解决这个问题的数据结构。

比如:

233 / 2 =116 rem =1

116 /2  =58  rem =0

58 / 2 =29 rem =0

29 /2 =14 rem=1

14 /2 =7 rem =0

7 / 2 =3 rem=1

3 /2 =1 rem =1

1 / 2 =0 rem =1

我们得到余数的顺序是从上往下得到的,但是我们要的二进制是从下往上的。利用栈的特性,先得到的入栈,这样最后入栈的反而在栈顶上。

代码如下:

class Stack:

def __init__(self):

self.items = []

def isEmpty(self):

return self.items == []

def push(self, item):

return 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(42)

同理,我们也可以处理8,16进制。但是16进制存在一个问题就是他不是0-10,是0-F。我们用一个字符串来稍微替换一下,代码如下:(栈的代码请自行补充)

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(233,16)

#print baseConverter(25,16)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值