求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
数据范围:数据组数:1\le t\le 5\1≤t≤5 ,1\le n\le 500000\1≤n≤500000
进阶:时间复杂度:O(logn)\O(logn) ,空间复杂度:O(1)\O(1)
输入描述:输入一个int类型数字
输出描述:输出转成二进制之后连续1的个数
输入:200
输出:2
说明:200的二进制表示是11001000,最多有2个连续的1。
def exam(num):
n=num
on = str(bin(n))[2:]
# 0b前两位无需做判断
# print('on: ',on)
# 0b11001000 200
# 0b10 2
# 499999 0b1111010000100011111
# 初始化配置计数变量cnt为1,后一位和前一位判断是否相等,如相等则加1
# cnt默认为1
cnt = 1
# 考虑到n取值为1时,1的个数只有1个,兼容1则默认big=1
big = 1
for i in range(1,len(on)):
# print(on[i])
# 避免超出len长度问题,范围从1开始,和前面0判断,长度为len
# 实际上i的值为 1开始 len-1结束,这样都判断了
# 0b0=0=n,的情况题目不需处理,所以默认big可以为1
if on[i-1] == on[i] == '1':
cnt += 1
# print(cnt)
if big < cnt:
# 每次有比big还大的则说明至少有2个连续1或N个,则替换cig值
big = cnt
elif on[i-1] != on[i]:
# 判断到先连续3个1然后是0,则cnt计数恢复0,big记录了最大了已经
cnt = 1
print(big)
num = int(input().strip())
exam(num=num)