python中stack在实际中的简单应用之进制转换

时间:2022-03-07 21:22:24

  计算机的世界是二进制的,而人类的世界是十进制的,当数学公式用计算机表达时,经常

要转换。这就用到了进制的转换。

  首先,我们先了解一下二进制和十进制的发展历史:

  二进制:

  现代的二进制首先由大数学家莱布尼兹设计的。

  1854年,英国数学家乔治·布尔发表了一篇里程碑式的论文,其中详细介绍了一种代数化的逻辑系统,

后人称之为布尔代数。他提出的逻辑演算在后来的电子电路设计中起基础性作用。

  1937年,克劳德·香农麻省理工大学完成了其电气工程硕士学位论文,用继电器和开关实现了布尔

代数和二进制算术运算。论文题为《继电器与开关电路的符号分析》(A Symbolic Analysis of Relay a

nd Switching Circuits)[6],其中香农的理论奠定了数字电路的理论基础。香农凭这篇论文于1940年被授

予美国阿尔弗雷德·诺贝尔协会美国工程师奖。哈佛大学的哈沃德·加德纳称,香农的硕士论文“可能是本

世纪最重要、最著名的硕士学位论文”。

  1937年11月,任职于贝尔实验室的乔治·斯蒂比兹[7]发明了用继电器表示二进制的装置。它是第一台

二进制电子计算机。

  可以得出这样的结论:由于计算机的基石就是使用二进制设计的,所以,理所当然二进制就成了计算机

的“”官方语言”。

  这里,python的实现代码如下:

import timeit

from timeit import Timer

class Stack:
        def __init__(self):
                self.items = []
        def is_empty(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 divide_by_2(dec_number):
        rem_stack = Stack()

        while dec_number > 0:
                rem = dec_number % 2
                rem_stack.push(rem)
                dec_number = dec_number // 2

        bin_string = ""
        while not rem_stack.is_empty():
                bin_string = bin_string + str(rem_stack.pop())

        return bin_string

print("Test binary value(42):")
print(divide_by_2(42))
print(divide_by_2(42))

def base_converter(dec_number,base):
        digits = "0123456789ABCDEF"

        rem_stack = Stack()

        while dec_number > 0:
                rem = dec_number % base
                rem_stack.push(rem)
                dec_number = dec_number // base

        new_string = ""
        while not rem_stack.is_empty():
                new_string = new_string + digits[rem_stack.pop()]

        return new_string

print("Test all converter 25:")
print(base_converter(25,2))
print(base_converter(25,4))
print(base_converter(25,8))
print(base_converter(25,16))

  运算结果:

Test binary value(42):
101010
101010
Test all converter 25:
11001
121
31
19