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

Kiểm tra số có số lượng bit 1 và bit 0 bằng nhau C++


Kiểm tra số N có số bit 1 (set bits) bằng số bit 0 (unset bits) trong biểu diễn nhị phân (không tính leading zeros).

Ví dụ: 12 = 1100₂ (2 bit 1, 2 bit 0) → Có. 35 = 100011₂ (3 bit 1, 3 bit 0) → Có.

Chương trình C++

#include <iostream>
#include <bitset>
using namespace std;

bool equalSetUnsetBits(int n) {
    if (n == 0) return false; // 0 = "0" -> 0 bit 1, 1 bit 0
    int set = 0, unset = 0;
    while (n > 0) {
        if (n & 1) set++; else unset++;
        n >>= 1;
    }
    return set == unset;
}

int main() {
    vector test = {12, 35, 10, 5, 3, 6, 9, 0};
    for (int n : test) {
        cout << n << " (" << bitset<8>(n) << ") -> "
             << (equalSetUnsetBits(n) ? "Bang nhau" : "Khac nhau") << "\n";
    }
    return 0;
}

Kết quả

12 (00001100) -> Bang nhau
35 (00100011) -> Bang nhau
10 (00001010) -> Bang nhau
5  (00000101) -> Khac nhau
3  (00000011) -> Khac nhau
6  (00000110) -> Bang nhau
9  (00001001) -> Bang nhau
0  (00000000) -> Khac nhau