目录
题目
小扇和小船今天又玩起来了数字游戏,小船给小扇一个正整数 n ,小扇需要找到一个比 n 大的数字 m,使得 m 和 n 对应的二进制中 1 的个数要相同,如:
1:4对应二进制100
2:8对应二进制1000
3:其中1的个数都为1个
现在求 m 的最小数。
输入描述
输入一个正整数 n (1<=n <= 1e9)
输出描述
输出一个正整数 m
示例1:
输入
2
输出
4
说明:
2的二进制为10,4的二进制为100,1的个数相同,且4是满足条件的最小数
示例2:
输入
7
输出
11
说明
7的二进制为111,11的二进制为1011,1的个数相同,且11是满足条件的最小数
代码
def get_binary_count_one(num):
count = 0
while True:
if num > 0:
count += num % 2
num = int(num / 2)
else:
break
return count
n = int(input())
count_n = get_binary_count_one(n)
for m in range(n + 1, 10 ** 9 + 1):
if get_binary_count_one(m) == count_n:
break
print(m)
# n = int(input())
# count_n = bin(n).count('1')
# for m in range(n + 1, 10 ** 9 + 1):
# if bin(m).count('1') == count_n:
# break
# print(m)