Python练习#1 二进制间隙(二进制数中两个1之间0的个数)

正整数N中的二进制间隙是指在N的二进制表示中两端都被1包围的任何最大的连续零序列。

例如,数字9的二进制表示为1001,包含一个长度为2的二进制间隙。 数字529的二进制表示为1000010001,包含两个二进制间隙:一个长度为4,一个长度为3。

def iteration(n):
    binary = {}  # 创建空的字典
    a = n  # 创建商寄存器,用来存储整除2后的商值
    r = 0
    # 用来迭代出数n的二进制格式
    while a//2 > 0:
        binary[r] = a % 2
        a = a//2
        r += 1
    binary[r] = a
    z = sorted(binary.items(), reverse=True)  # 格式转换为了列表
    z = tuple(z)  # 将列表转换为元组
    # 计算间隙
    x = 0  # 1位置计数
    y = 0  # 长度计数
    for i in range(len(z)):
        if (z[i][1] == 1) & (i != 0):
            if (i-x > 1) & (i-x-1 > y):
                y = i-x-1
            x = i

    return y

总结:

  • 在编写过程中遇到了关于列表,元组和字典间的转换问题,在弄明白三者间的区别后,难度就没有那么大了。关于三者的定义与区别,我总结在了这篇文章里:

https://blog.csdn.net/weixin_45907952/article/details/129146682?spm=1001.2014.3001.5501

  • 我的主要编程逻辑为:

  1. 寻找第二个1所在的位置(因为第一个1一定存在于第一位);

  1. 判断是否大于上一个间隙的长度,如果是则更新长度计数器。

  • 要加油学习!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值