首页 > 解决方案 > 十进制到二进制和连续 1 的计数

问题描述

所以,我得到了这个问题,必须输入两个数字并找到它们之间所有数字的二进制表示,我们必须检查二进制形式中是否有连续的 1,如果存在则跳过,否则打印它。

我已经尝试了这么多,我已经创建了所需的二进制表示列表,但是现在如何迭代每个数字并检查那个 1 的可能性?

n = int(input())
m = int(input())
str=[]
for i in range(n+1,m):
    x = bin(i)
    str.append(x)
print(str)

这是输出

3
7
['0b100', '0b101', '0b110']

标签: python-3.x

解决方案


所以是这样的:

def solve(a, b):
    result = []
    for x in range(a, b):
        binary_str = bin(x)
        if '11' not in binary_str:
            result.append(binary_str)
    return result
a = int(input())
b = int(input())
r = solve(a, b)
print(r) # ['0b100', '0b101']

请注意,bin它返回的不是二进制而是二进制表示(即字符串)。

一种效率稍低(因为bin()被称为两次)但更短的解决方案:

def solve(a, b):
    return [bin(x) for x in range(a, b) if '11' not in bin(x)]
print(*solve(int(input()), int(input()))) # 0b100 0b101

推荐阅读