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

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

    原文作者:进制转换
    原文地址: https://blog.csdn.net/cdfukaifeng/article/details/79753590
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞