加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python3 利用栈 将十进制转换为二进制,及十六以下任意进制

发布时间:2020-12-17 17:02:34 所属栏目:Python 来源:网络整理
导读:python3 利用栈 将十进制转换为二进制 十进制转换二进制代码逻辑 十进制转换为二进制,采用的“除以2求余数”的算法。(将整数不断除以2,每次得到余数就是由低到高的二进制位) 如100转换为二进制: 100/2=50....(余数为0);?50/2=25.....(余数为0);?25/2=12

python3 利用栈 将十进制转换为二进制

十进制转换二进制代码逻辑

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

如100转换为二进制:

100/2=50....(余数为0);?
50/2=25.....(余数为0);?
25/2=12.....(余数为1);?
12/2=6......(余数为0);?
6/2=3.......(余数为0);?
3/2=1.......(余数为1);?
1/2=0.......(余数为1);?

所以100的二进制表示形式为1100100;

十进制转换为二进制代码如下:

class?Stack():
????def?__init__(self):
????????self.items=[]

????#?判断栈是否为空
????def?isEmpty(self):
????????return?len(self.items)==0

????#?把数据放入栈
????def?push(self,item):
????????self.items.append(item)

????#?从栈中取数据
????def?pop(self):
????????return?self.items.pop()

????#?栈顶
????def?peek(self):
????????return?self.items[-1]

????#?栈的长度
????def?size(self):
????????return?len(self.items)

def?divideBy2(desc_number):
????sobj=Stack()

????while?desc_number>0:
????????#?求余数
????????rem=desc_number?%?2

????????sobj.push(rem)
????????#?整数数
????????desc_number=desc_number?//?2

????bin_string?=?''
????while?not?sobj.isEmpty():
????????bin_string?+=?str(sobj.pop())

????return?bin_string

if?__name__?==?'__main__':
????print(divideBy2(220))
????print(divideBy2(42))

十进制转换十六以下任意进制代码

更多进制转换规律:

  • 二进制有两个不同数字:0、1

  • 八进制有八个不同的数字:0、1、2、3、4、5、6、7

  • 十进制有十个不同数字:0、1、2、3、4、5、6、7、8、9

  • 十六进制有十六个不同数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F

class?Stack():
????def?__init__(self):
????????self.items=[]

????#?判断栈是否为空
????def?isEmpty(self):
????????return?len(self.items)==0

????#?把数据放入栈
????def?push(self,item):
????????self.items.append(item)

????#?从栈中取数据
????def?pop(self):
????????return?self.items.pop()

????#?栈顶
????def?peek(self):
????????return?self.items[-1]

????#?栈的长度
????def?size(self):
????????return?len(self.items)
????????
def?baseCouverter(desc_number,base):
????#?利用空间换取时间,提前存储16进制以内用到的数字
????digits='123456789ABCDEF'

????sobj?=?Stack()

????while?desc_number?>?0:
????????#?求余数
????????rem?=?desc_number?%?base
????????sobj.push(rem)
????????
????????#?整数数
????????desc_number?=?desc_number?//?base

????bin_string?=?''
????while?not?sobj.isEmpty():
????????#?获取digits索引对应的字符串
????????bin_string?+=?str(digits[sobj.pop()])

????return?bin_string
????
????
if?__name__?==?'__main__':
????print(baseCouverter(123,16))
????print(baseCouverter(42,2))

结果:

8C
212121


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读