C++中N个二进制字符串的按位或运算
在这个问题中,我们得到一个大小为n的二进制字符串数组bin[]。我们的任务是编写一个程序来查找n个二进制字符串的按位或(&)运算结果。
在这里,我们将取所有数字并找到它们的按位与,即bin[0] | bin[1] |... bin[n-2] | bin[n]
让我们来看一个例子来理解这个问题:
输入 −
bin[] = {“1001”, “11001”, “010101”}
输出 −
011101
说明 −所有二进制字符串的按位或运算 −
(1001) | (11001) | (010101) = 011101
为了解决这个问题,我们将简单地找到位数最多的字符串(最长字符串)。然后,我们将向所有字符串添加足够的前面0。然后找到位的按位或。
让我们来看一个例子来说明算法的工作原理:
bin[] = {“1101”, “011010” , “00111”}
最长字符串是011010,长度为6。因此,我们将向其他字符串添加前导0。
更新后的字符串 − “001101”, “011010”, “000111”。
查找所有字符串的按位或运算 − 001101 | 011010 | 000111 = 011111
示例
程序演示了我们解决方案的工作原理:
#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; }
输出
The bitwise OR of all the binary String of the string array is 011111
广告