解题思路
本题可以使用 位运算 + 模拟。
我们只需要关注二进制中每个 1 出现的位置。
如果相邻两个 1 的位置差为 gap,那么它们之间 0 的数量就是:
gap - 1
P14380.等距二进制判断(100分)
题目内容
对于一个二进制数,我们定义相邻两个 1 之间 0 的数量为他们两个之间的距离,如 1001011,相邻两个 1 之间的距离从左到右分别为 2、1、0。
现在如果一个整数转化为二进制数满足如下条件:
- 包含不少于3个1
- 所有相邻数字1之间的距离相同
我们称之为等距二进制,如 21(二进制为:10101)、60(二进制为:111100)、146(二进制为:10010010)。
输入描述
现给定一个输入,整数0 <= n < (2^31 - 1)
输出描述
如果 n 是等距二进制,请输出它的距离,如果不是等距二进制,请输出 −1
样例1
输入
21
输出
1
说明
二进制为 10101,距离为 1
样例2
输入
60
输出
0
说明
二进制为 111100,距离为 0
样例3
输入
146
输出
2
说明
二进制为 10010010,距离为 2
样例4
输入
2
输出
-1
说明
二进制为 10,不满足条件 1,非等距二进制