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

Bitwise OR của N xâu nhị phân trong C++


Trong bài toán này, ta được cho mảng bin[] kích thước n chứa các xâu nhị phân. Nhiệm vụ: tạo chương trình tìm Bitwise OR (|) của n xâu nhị phân.

Ta lấy tất cả số và tìm bitwise OR của chúng: bin[0] | bin[1] | ... | bin[n-1].

Ví dụ minh họa

Đầu vào** –

bin[] = {"1001", "11001", "010101"}

Đầu ra** –

011101

Giải thích** – Bitwise OR của tất cả xâu nhị phân:

(1001) | (11001) | (010101) = 011101

Giải pháp: tìm xâu dài nhất (max length). Thêm số 0 đầu đủ (leading zeros) cho các xâu ngắn hơn. Sau đó tính OR từng bit.

Ví dụ

bin[] = {"1101", "011010", "00111"}

Max length = 6 ("011010"). Cập nhật: "001101", "011010", "000111".

OR từng bit: 001101 | 011010 | 000111 = 011111

Chương trình minh họa:**

Ví dụ

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

string bitwiseOR(string* bin, int n) {
    string result;
    int max_size = INT_MIN;
    for (int i = 0; i < n; i++) {
        max_size = max(max_size, (int)bin[i].size());
        reverse(bin[i].begin(), bin[i].end());
    }
    for (int i = 0; i < n; i++) {
        string s;
        for (int j = 0; j < max_size - bin[i].size(); j++)
            s += '0';
        bin[i] = bin[i] + s;
    }
    for (int i = 0; i < max_size; i++) {
        int insertBit = 0;
        for (int j = 0; j < n; j++)
            insertBit = insertBit | (bin[j][i] - '0');
        result += (insertBit + '0');
    }
    reverse(result.begin(), result.end());
    return result;
}

int main() {
    string bin[] = { "1101", "011010", "00111" };
    int n = sizeof(bin) / sizeof(bin[0]);
    cout << "The bitwise OR of all the binary String of the string array is " << bitwiseOR(bin, n);
    return 0;
}

Đầu ra

The bitwise OR of all the binary String of the string array is 011111