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

เลขฐานสองพร้อมบิตสลับกันใน C++


สมมติว่าเรามีจำนวนเต็มบวก เราต้องตรวจสอบว่ามีบิตสลับกันหรือไม่ ดังนั้น บิตที่อยู่ติดกันสองบิตจะมีค่าต่างกันเสมอ

ดังนั้น หากอินพุตเท่ากับ 10 เอาต์พุตจะเป็น True เนื่องจากการแสดงไบนารีของ 10 คือ 1010

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • p :=n AND 1
  • ถ้า n <2 แล้ว −
    • คืนค่าจริง
  • n :=n/2
  • ในขณะที่ n ไม่ใช่ศูนย์ ให้ทำ −
    • c :=n AND 1
    • ถ้า c XOR p เหมือนกับ 0 แล้ว −
      • คืนค่าเท็จ
    • p :=c
    • n :=n/2
  • คืนค่าจริง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool hasAlternatingBits(int n) {
      bool p=n&1;
      bool c;
      if(n<2)
         return true;
      n>>=1;
      while(n){
         c=n&1;
         if(c^p==0)
            return false;
         p=c;
         n>>=1;
      }
      return true;
   }
};
main(){
   Solution ob;
   cout << (ob.hasAlternatingBits(10));
}

อินพุต

10

ผลลัพธ์

1