Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่าตัวเลขมีบิตในรูปแบบอื่นหรือไม่ - Set-2 O(1) Approach in C++


ให้เราพิจารณาว่าเรามีจำนวนเต็ม 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