Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Số nhị phân có bit luân phiên trong C++


Mô tả bài toán

Cho số nguyên dương n, kiểm tra xem biểu diễn nhị phân có bit luân phiên không (hai bit liền kề luôn khác nhau).

Ví dụ: 10 (nhị phân 1010) → True.

Giải pháp (Kiểm tra bit)

  • Lấy bit thấp nhất p = n & 1.
  • Dịch phải n >>= 1, lặp:
    • Bit hiện tại c = n & 1.
    • Nếu c ^ p == 0 (hai bit giống nhau) → false.
    • Cập nhật p = c, dịch tiếp.
  • Nếu hết vòng lặp → true.

Ví dụ minh họa

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    bool hasAlternatingBits(int n) {
        bool p = n & 1;
        if (n < 2) return true;
        n >>= 1;
        while (n) {
            bool c = n & 1;
            if ((c ^ p) == 0) return false;
            p = c;
            n >>= 1;
        }
        return true;
    }
};

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

Đầu vào

10

Đầu ra

1