检查数字是否有交替模式的位 - C++ 中的 Set-2 O(1) 方法

c++server side programmingprogramming更新于 2024/9/22 23:54:00

假设我们有一个整数 n。问题是检查这个整数在其二进制等价物中是否有交替模式。交替模式意味着 101010….

方法如下:计算 num = n XOR (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

相关文章