zoukankan      html  css  js  c++  java
  • python中stack在实际中的简单应用之进制转换

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

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

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

      二进制:

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

      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
  • 相关阅读:
    机器学习入门
    elixir 高可用系列
    elixir 高可用系列(五) Supervisor
    elixir 高可用系列(四) Task
    elixir 高可用系列(三) GenEvent
    golang 值得注意的地方(2则)
    elixir 高可用系列(二) GenServer
    elixir 高可用系列(一) Agent
    elixir 入门笔记
    elixir mix 简介
  • 原文地址:https://www.cnblogs.com/dylancao/p/8064102.html
Copyright © 2011-2022 走看看