题目:
描述
求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1
本题含有多组样例输入。
输入描述:
输入一个byte数字
输出描述:
输出转成二进制之后连续1的个数
示例1
输入:
3
5
输出:
2
1
说明:
3的二进制表示是11,最多有2个连续的1。
5的二进制表示是101,最多只有1个连续的1。
给的提示是位运算,自己写的思路就是位运算所以分享一下,并附两个其他人的思路
法1(自己写的):
思路:从后往前对每一段连续的1计数,遇0清空计数并存档,下次遇到连续次数更多的就更新存档
while True:
try:
n = int(input())
count = 0
res = 0
while n:
count += n&1
n >>= 1
if not n&1:
if count > res:
res = count
count = 0
print(res)
except:
break
法2:
思路:从1个1开始找,一直到几个1不在字符串内,那这个“几个”就是连续1的个数
while True:
try:
res, a = 0, bin(int(input())).replace("0b", "")
for i in range(1, len(a) + 1):
if "1" * i in a:
res = i
else:
break
print(res)
except:
break
法3:
思路:用字符串分割的方法,用'0'分割出形如['11','1','1','111']的列表,找列表中长度最大的
while True:
try:
n = int(input())
m = str(bin(n)[2:])
l = m.split('0')
num = 0
for i in l:
num = max(num, len(i))
print(num)
except:
break