C ++中N个二进制字符串的按位或

在这个问题中,我们得到了二进制字符串大小为n的数组bin []。我们的任务是创建一个程序来查找n个二进制字符串的按位“或”(&)。

在这里,我们将取所有数字并找到它们的按位与,即bin [0] | bin [1] | ... bin [n-2] | 箱[n]

让我们举个例子来了解这个问题,

输入-

bin[] = {“1001”, “11001”, “010101”}

输出-

011101

说明-所有二进制字符串的按位或-

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

为了解决这个问题,我们将简单地找到具有最大位数的字符串(最大长度字符串)。然后,我们将为所有字符串添加足够数量的前导0。然后找到这些位的按位或。

让我们以一个例子来展示算法的工作原理-

bin[] = {“1101”, “011010” , “00111”}

最大长度字符串为011010,长度为6。因此,我们将在其他字符串中添加前导0。

更新的字符串-“ 001101”,“ 011010”,“ 000111”。

查找所有字符串的BITWISE OR-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

以上是 C ++中N个二进制字符串的按位或 的全部内容, 来源链接: utcz.com/z/335325.html

回到顶部