Python数据结构与算法06:基本结构:栈的应用之进制转换
off999 2024-10-30 03:07 41 浏览 0 评论
注:本文如涉及到代码,均经过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 binString
print(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 binString
print(baseConverter(25, 2)) # 求十进制数25转换为二进制后的结果。
print(baseConverter(25, 16)) # 求十进制数25转换为十六进制后的结果。。
<<<
11001
19
<<<
今天介绍的是,如何将十进制转换为二进制。更多的进制之间的转换后续会进一步介绍。
To be continued.
相关推荐
- 视频剪辑器(视频剪辑器在线使用)
-
推荐4款常用的视频剪辑软件吧:大众级别的:剪大师、会声会影专业级别的:AdobePremiere、EDIUS先介绍大众级别的吧:一:剪大师?自动关键帧动画技术,多轨逐帧精确剪辑,制作精彩动画影片?...
- y2002电音(y2002电音app下载)
-
http://music.163.com/?t=1434936352062#/search/m/?s=Bear%20Grillz&type=1
- 刷机大师官网(如何自己刷机)
-
刷机工具除了爱思助手,还有一件刷机大师等第三方刷机工具。助手作为国内的一个第三方刷机工具,除了这个刷机工具之外,还有其他的辅助工具也能进行刷机,例如线刷大师或者线刷宝。以及一键刷机大师等第其他第三方...
- 4399以前的老游戏全部(4399以前的老游戏全部双人游戏)
-
现在都是玩另外的游戏的OL这款游戏的玩法多样,技能连招华丽,并且很实用,让我们的每一刀都那么使用,CAPCOM的游戏打击感总是那么爽落,OL也支持手柄模式,CAPCOM的手柄独特的打击震动,让...
- 斗地主游戏玩法(斗地主玩法百度经验)
-
该游戏由三人个玩一副牌,地主是一方,其余两家为另一方,双方对战,先出完的一方胜。出牌规则类似“争上游”。三人斗地主使用一副54张的扑克牌,包括两张怪(王),即大怪和小怪。牌面从大到小依次是:大怪、小怪...
-
- qq好友恢复官方网站(qq好友恢复官方网站入口)
-
qq恢复官方网站,http://huifu.qq.com/1、什么是QQ恢复系统?QQ恢复系统是腾讯公司提供的一项找回QQ联系人、QQ群的服务,向所有QQ用户免费开放。2、QQ恢复系统能恢复多长时间内删除的好友?普通用户可以申请恢复3个月内...
-
2026-01-19 08:15 off999
- live tv全球电视直播(live tv全球电视直播密码)
-
首先搞清楚你的电视机和机顶盒的iptv连接口,电视机开机,点击遥控器上的菜单按键,电视上菜单界面选择图像,在图像的输入界面选择你的iptv接口,然后退出,点击iptv界面的设置,在设置界面选择系统通用...
-
- 输入名字自制签名的软件(输入名字自制签名的软件有哪些)
-
1我不确定抖音主播是否使用签名软件。2如果抖音主播使用签名软件,可能是为了增加视频的可见度和吸引更多的观众,或者为了展示自己的个性和特点。3一些常用的签名软件包括美图秀秀、照片美化大师等,可以通过在应用商店下载安装。但是,使用签名软件...
-
2026-01-19 07:51 off999
- 电脑单机游戏大全免费(电脑单机游戏大全免费版)
-
正常情况下,如果我们想要在自己的电脑上面下载一个不要钱的单机游戏,那么我们是可以直接在我们的软件管理中心进行一个下载的,这个时候我们只需要通过一个权限就能够正常的下载,当然我们也是可以在一些小游戏的软...
- 电视剧免费下载网站大全(电视剧免费下载官方网站)
-
下载电视剧吧,这个网站很好。https://yunpan.cn/OcBQuh5dS9ujYp(提取码:7edf) 可以缓存的电视剧的电脑软件:暴风影音、优酷、爱奇艺、迅雷看看、PPTV聚力网络电...
- 录音机下载免费安装(录音机下载免费安装到桌面)
-
现在的手机都是智能机,你想录音机自带可以直接下载一个录音机功能的就可以找到文件管理,看到音乐声音文件夹在里面的自带录音机不用下载,购买的新手机上就已经自带了。如果手机录音怎么下载,那么牛直接可以去...
-
- 十大免费加密软件(十大免费加密软件排行榜)
-
照片保险箱是一个超级强大的隐私保护应用,可以安全得隐藏您不想让人看见的照片和视频。照片保险箱采用了独特的文件隐藏保护技术,可以将您珍贵的照片与视频隐藏于一个隐秘空间。不仅如此,它更有着简洁的界面与影像浏览设计,让您可以随时随地愉悦地欣赏您的...
-
2026-01-19 06:51 off999
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
