【题目】
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
数据范围:数据组数:1≤t≤5 1≤t≤5 ,1≤n≤500000 1≤n≤500000
进阶:时间复杂度:O(logn) O(logn) ,空间复杂度:O(1) O(1)
输入描述:
输入一个int类型数字
输出描述:
输出转成二进制之后连续1的个数
【代码】
【写法1】
import sys
for line in sys.stdin:
bline=str(bin(int(line)))
maxcnt=0
cnt=0
for item in bline:
if item=="1":
cnt+=1
else:
maxcnt=max(maxcnt,cnt)
cnt=0
print(max(maxcnt,cnt))
【写法2】
import sys
for line in sys.stdin:
num=int(line)
maxcnt=0
cnt=0
while num:
if num%2==1:
cnt+=1
else:
maxcnt=max(maxcnt,cnt)
cnt=0
num//=2
print(max(maxcnt,cnt))
【写法3】位运算
import sys
for line in sys.stdin:
num=int(line)
maxcnt=0
cnt=0
while num:
if num&1==1:
cnt+=1
else:
maxcnt=max(maxcnt,cnt)
cnt=0
num>>=1
print(max(maxcnt,cnt))
【写法4】
import sys
for line in sys.stdin:
temp=str(bin(int(line.strip()))[2:])
temp=temp.split("0")
maxcnt=0
for item in temp:
maxcnt=max(maxcnt,len(item))
print(maxcnt)