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

ตัวเลขไบนารีที่มีบิตสลับกันใน C++

ปัญหา

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

เช่น ถ้าผนวกเข้าเป็น 10 ผลลัพธ์จะเป็น True เนื่องจากการแทนค่าในรูปแบบไบนารีของ 10 คือ 1010

วิธีแก้ปัญหา

  1. p := n AND 1
  2. ถ้า n < 2: คืนค่า true
  3. n := n/2
  4. while n ไม่เท่ากับ 0 ทำ:
    • c := n AND 1
    • ถ้า c XOR p เท่ากับ 0: คืนค่า false
    • p := c
    • n := n/2
  5. คืนค่า true

ตัวอย่างโค้ด C++

#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; 
    } 
}; 

int main(){ 
    Solution ob; 
    cout << (ob.hasAlternatingBits(10)); 
}

อินพุต

10

เอาต์พุต

1