2023华为OD机试真题-不含101的数(JAVA、Python、C++)

题目描述:
小明在学习二进制时,发现了一类不含101的数,也就是:

- 将数字用二进制表示,不能出现101。

现在给定一个正整数区间,请问这个区间内包含了多少个不含101的数?
输入描述:
输入的唯一一行包含两个正整数。
输出描述:
输出的唯一一行包含一个整数,表示在区间内一共有几个不含101的数。
补充说明:
 收起
示例1
输入:
1 10
输出:
8
说明:
区间[1,10]内,5的二进制表示为101,10的二进制表示为1010,因此除了5与10不满足条件外,其他数字都满足条件,因此答案为8。
示例2
输入:
10 20
输出:
7
说明:
区间[10,20]内,满足条件的数字有[12,14,15,16,17,18,19],因此答案为7。
 

import sys
if __name__ == "__main__":
    def judge(n):
        if '101' in bin(n):return True
        else:return False
 
    tmp=sys.stdin.readline().strip().split()
    l,r=int(tmp[0]),int(tmp[1])
    # l,r=1,10
    result=0
    i=l
    while i<=r:
        if i%2==0:
            if judge(i):i+=2
            else:
                result += 1
                i+=1
                if bin(i)[-3:]!='101':result+=1
                i+=1
        else:
            if not judge(i):result+=1
            i+=1
 
    print(result)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值