题目描述:
小明在学习二进制时,发现了一类不含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'在不在字符串里就可以了
#华为机试,emo了#
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)