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

更新於:2020年8月5日

287 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.