检查数字是否有其他模式的位-C ++中的Set-2 O(1)方法
让我们考虑我们有一个整数n。问题是检查此整数是否具有等效的二进制二进制模式。备用模式表示101010…。
方法类似于:计算num=nXOR(n>>1),现在,如果num的所有位均为1,则num具有交替的模式。
示例
#include <iostream>
#include <algorithm>
using namespace std;
bool isAllBitSet(int n){
if (((n + 1) & n) == 0)
return true;
return false;
}
bool hasAlternatePattern(unsigned int n) {
unsigned int num = n ^ (n >> 1);
return isAllBitSet(num);
}
int main() {
unsigned int number = 42;
if(hasAlternatePattern(number))
cout << "Has alternating pattern";
else
cout << "Has no alternating pattern";
}输出结果
Has alternating pattern
热门推荐
10 老婆生日祝福语短句简短
11 给老人的祝福语简短
12 简短新婚铺被子祝福语
13 贺卡文字同事祝福语简短
14 爱小姨文案祝福语简短
15 毕业祝福语简短英语小学
16 住学长学姐祝福语简短
17 白羊生日祝福语 简短独特
18 敏字的祝福语简短