数据结构 算法学习之——进制问题

举报
是Dream呀 发表于 2022/07/30 22:00:46 2022/07/30
【摘要】 数据结构 算法学习之——进制问题

一码解决二进制到十六进制问题

hello,大家好我是Dream。好久不见,不出意外的的话,以后我都会在的。嘿嘿嘿(手动狗头)。。。。
在这里插入图片描述
1.我的plan

List item

最近呢,我有一个打算,我想利用这段时间把数据结构和算法自学完,然后我也会在这里和代价分享一下我关于数据结构和算法学习的一些收获和自己的感想,感兴趣的小伙伴快加入我一起学习吧
**2.二进制问题
在研究任何问题的时候,我们往往从最开始的问题开始研究,那研究进制问题也是这样,那我们先从研究二进制问题开始吧:
话不多说,先上代码:

from pythonds.basic import Stack
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(55))

如果没学过数据结构的话,不知道大家乍一看这个代码能看懂吗,看不懂没关系,我们来一步一步的看,轻松拿捏!
首先这里调用了pythonds.basic中的Stack,也就是一个栈!
接下来给大家普及一下栈的简单用法

Stack() 创建一个空的新栈。 
push(item)将一个新项添加到栈的顶部。
pop() 从栈中删除顶部项。
peek() 从栈返回顶部项,但不会删除它。
isEmpty() 测试栈是否为空。
size() 返回栈中的 item 数量。

如果不太懂的小伙伴可以去简单的再看一下栈,其实栈跟列表是十分相像的,只是操作方法不一样罢了。
然后:
def divideBy2(decNumber)#这里定义了一个函数

接着:
remstack=Stack() #创建空栈

再然后:

while decNumber>0:
        rem = decNumber%2
        remstack.push(rem)
        decNumber=decNumber//2

#这里用了一个while循环,将每次除二后的余数用push()储存在栈中,每次的余数倒序排列就是我们要求的二进制数(这应该是我们中学信息课学过的内容,不懂的小伙伴可以自己百度一下,这里我就不详细说了)。这部分简称入栈!

    while not remstack.isEmpty():
        binString=binString+str(remstack.pop())
    return binString

#这里循环遍历栈, 只要栈还不是空的,就掏空他!!!
利用pop()函数依次从栈顶开始删除和返回(就是上文所说的倒序的意思,倒着从栈顶开始返回)这部分简称出栈!
binString=’'将栈中的元素以字符串的形式存储起来,形成一个二进制数进行输出!
看完这里是不是 相当明白了,嘿嘿嘿!
然后给大家展示任意进制:
3.任意进制`

from pythonds.basic import Stack
def baseConverter(decNumber,base):#base表示几进制
    digits='0123456789ABCDREF'
    remstack=Stack()
    while decNumber>0:
        rem = decNumber%base
        remstack.push(rem)
        decNumber=decNumber//base
    newString=''
    while not remstack.isEmpty():
        newString=newString+digits[remstack.pop()]
    return newString
print(baseConverter(16,16))

这里ABCDEF输出时代表余数为10 11 12 13 14 15,这里大家好好研究一下吧哈哈哈哈哈
如果你喜欢的话,就不要吝惜你的一键三连了~
谢谢大家!
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。