当前位置: 首页 > 面试经验 >

【华为OD机试2023】不含101的数(Python)

优质
小牛编辑
103浏览
2023-03-28

【华为OD机试2023】不含101的数(Python)

题目描述:

小明在学习二进制时,发现了一类不含101的数,也就是: - 将数字用二进制表示,不能出现101。 现在给定一个正整数区间[l,r],请问这个区间内包含了多少个不含101的数?

输入描述:

输入的唯一一行包含两个正整数l,r(1<=l<r<=109)。

输出描述:

输出的唯一一行包含一个整数,表示在[l,r]区间内一共有几个不含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。

解题思路:

这道题居然是200分的,谁运气好抽到了就是送分啊。

遍历区间内所有数字,用bin()函数转为二进制,注意bin()返回的是格式为'0x.......'的字符串,需要去掉开头的'0x'才行,然后就是看'101'在不在字符串里就可以了


start,stop=map(int,input().split())
count=0
for num in range(start,stop+1):
erjinzhi=bin(num)[2:]
if '101' not in erjinzhi:
count+=1
print(count)

#华为机试,emo了#
 类似资料: