龙空技术网

Python数据结构与算法06:基本结构:栈的应用之进制转换

挂可挂 45

前言:

现时兄弟们对“python将10进制转换为n进制”大体比较注重,小伙伴们都需要学习一些“python将10进制转换为n进制”的相关文章。那么小编在网摘上网罗了一些关于“python将10进制转换为n进制””的相关内容,希望兄弟们能喜欢,朋友们快快来学习一下吧!

注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性。

本文阅读时间约为9分钟。

十进制与二进制

十进制是我们熟悉的逢十向高位进一位,如1+9=10。

二进制则是类似地逢二向更高位进一位,如1+1=10。

所谓“进制”,就是用多少个字符表示整数。十进制是用0~9这10个数字字符来表示整数,而二进制则是用0、1这2个数字字符来表示整数。

拿一个例子来说,(233)_{10}(表示十进制的整数233)对应的二进制整数为(11101001)_{2}(表示二进制的整数11101001)。

十进制的表示——(233)_{10}=2*10^2+3*10^1+3*10^0。

二进制的表示——(11101001)_{2}=1*2^7+1^2^6+1*2^5+0*2^4+1*2^3+0*2^2+0*2^1+1*2^0。

最右边的数字的指数为0,每向左1位的数字,其指数加1,如从右至左第2位数指数为1,从右至左第3位数指数为2,依次类推。

多少进制就是多少进制的几次幂。

十进制转换为二进制

我们经常需要在二进制和十进制之间转换。

十进制转换为二进制,采用的是“除以2求余数”的算法。将整数不断除以2,每次得到的余数就是由低到高的二进制位。


十进制转换为二进制的例子


“除以2”的过程,得到的余数是从低到高的次序,而输出则是从高到低,这就需要一个东西来做“次序反转”,而栈的特性正是“反转次序”,所以栈在这里就有用武之地了。

用栈来实现就是:

class Stack:    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 binStringprint(divideBy2(42))<<<101010
十进制转换为N进制

上述十进制转换为N进制的思想也可以扩展为,把十进制转换为n进制,只需要把“除以2”改为“除以N”即可。

计算机中有另外两种常用的进制,分别是八进制和十六进制。十六进制高于十进制,规定用A、B、C、D、E、F分别表示10、11、12、13、14、15。

八进制和十六进制的例子如下:

(233)_{10}=(351)_{8}=(E9)_{16}。

(351)_{8}=3*8^2+5*8^1+1*8^0。

(E9)_{16}=14*16^1+9*16^0。

如何表示八进制和十六进制

上述代码改成十进制转换为十六进制,因为十六进制高于十进制,它有ABCDEF等6个字母表示数字,所以代码中也要有相应的改变。

以下是十进制数转化为n进制数(n<=16)的代码(代码中n用base代替):

class Stack:    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    binString = ""    while not remstack.isEmpty():        binString = binString + digits[remstack.pop()]    return binStringprint(baseConverter(25, 2))  # 求十进制数25转换为二进制后的结果。print(baseConverter(25, 16))  # 求十进制数25转换为十六进制后的结果。。<<<1100119<<<

今天介绍的是,如何将十进制转换为二进制。更多的进制之间的转换后续会进一步介绍。

To be continued.

标签: #python将10进制转换为n进制 #数制转换数据结构算法 #数制转换数据结构算法是什么 #数制转换数据结构算法是什么类型 #数制转换栈的应用实例