- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Bitwise AND of N binary strings in C++
In this problem, we are given an array bin[] of size n of binary strings. Our task is to create a program to find the Bitwise AND (&) of N binary strings.
Here, we will take all numbers and find the bitwise AND of them i.e. bin[0] & bin[1] &... bin[n-2] & bin[n]
Let’s take an example to understand the problem,
Input −
bin[] = {“1001”, “11001”, “010101”}
Output −
000001
Explanation − Bitwise AND of all binary string −
(1001) & (11001) & (010101) = 000001
To solve this problem, a direct and simple approach is to find the bitwise AND of two binary strings and then find the bitwise AND of the result with the next and go on till the last string of the array.
Basic Algorithm will be −
initially → result = bin[0] and i = 1
Step 1 − Repeat steps 2 and 3 until the array ends.
Step 2 − result = result & bin[i]
Step 3 − i++;
Step 4 − print the result.
Now, let’s solve the example with the help of this approach −
bin[] = {“1001”, “11001”, “010101”} result = bin[0] = 1001, i = 1
Iteration 1 −
result = 1001 & 11001 = 01001 i = 2
Iteration 2 −
result = 01001 & 010101 = 000001 i = 3. END
Example
Program to illustrate the above solution,
#include <iostream> using namespace std; int changeLength(string &a, string &b){ int lengtha = a.length(); int lengthb = b.length(); int zeros = abs(lengtha-lengthb); if (lengtha<lengthb) { for (int i = 0 ; i<zeros; i++) a = '0' + a; return lengthb; } else { for (int i = 0 ; i<zeros; i++) b = '0' + b; } return lengtha; } string bitwiseAND(string binary1, string binary2){ int length = changeLength(binary1,binary2); string result = ""; for (int i = 0 ; i<length; i++){ result = result+(char)((binary1[i] - '0' & binary2[i]-'0')+'0'); } return result; } int main(){ string bin[] = {"1001", "11001", "010101"}; int n = sizeof(bin)/sizeof(bin[0]); string result; if (n<2){ cout<<bin[n-1]<<endl; } else{ result = bin[0]; for (int i = 1; i<n; i++) result = bitwiseAND(result, bin[i]); cout <<result<<endl; } }
Output
000001
This approach is easy but not the most effective one as it needs to traverse the string.
Let’s discuss a more effective solution,
Here, we will find the size of the smallest and largest bits of the binary number. Then we will find the bitwise AND of each bit of the number and at the end we will add preceding 0’s (no. of zeros will be the largest - smallest).
Let’s take an sample example to make the solution clear,
bin[] = {"1001", "11001", "010101"} Largest = 010101 smallest = 1001 010101 & 1001 = 00001
Example
Program to show the implementation of the above approach −
#include <bits/stdc++.h> using namespace std; string bitwiseANDarray(string* bin, int n){ string result; int minSize = INT_MAX; int maxSize = INT_MIN; for (int i = 0; i < n; i++) { reverse(bin[i].begin(), bin[i].end()); minSize = min(minSize, (int)bin[i].size()); maxSize = max(maxSize, (int)bin[i].size()); } for (int i = 0; i < minSize; i++) { bool setBit = true; for (int j = 0; j < n; j++) { if (bin[j][i] == '0') { setBit = false; break; } } result += (setBit ? '1' : '0'); } for (int i = 0; i<abs(maxSize-minSize); i++) result += '0'; reverse(result.begin(), result.end()); return result; } int main(){ string arr[] = {"1001", "11001", "010101"}; int n = sizeof(arr) / sizeof(arr[0]); cout<<bitwiseANDarray(arr, n); return 0; }
Output
000001
- Related Articles
- Bitwise OR of N binary strings in C++
- Add n binary strings in C++?
- Add n binary strings?
- Print bitwise AND set of a number N in C++
- Count number of binary strings of length N having only 0’s and 1’s in C++
- Find the number of binary strings of length N with at least 3 consecutive 1s in C++
- Program to add two binary strings, and return also as binary string in C++
- Largest set with bitwise OR equal to n in C++
- Bitwise AND of Numbers Range in C++
- Program to add two binary strings in C++
- Find n-th lexicographically permutation of a strings in C++
- Bitwise and (or &) of a range in C++
- Maximum difference of zeros and ones in binary string - (O(n) time) in C++
- What is Bitwise AND in C++?
- Count of Binary Digit numbers smaller than N in C++
