Open In App

C++ Program To Add Two Binary Strings

Improve
Improve
Like Article
Like
Save
Share
Report

Given two binary strings, return their sum (also a binary string).
Example:

Input:  a = "11", b = "1"
Output: "100" 

We strongly recommend you to minimize your browser and try this yourself first 
The idea is to start from the last characters of two strings and compute the digit sum one by one. If the sum becomes more than 1, then store carry for the next digits.

C++




// C++ program to add two 
// binary strings
#include <bits/stdc++.h>
using namespace std;
  
// This function adds two binary strings 
// and return result as a third string
string addBinary(string A, string B)
{
    // If the length of string A is greater 
    // than the length of B then just swap 
    // the string by calling the same 
    // function and make sure to return 
    // the function otherwise recursion 
    // will occur which leads to calling 
    // the same function twice
    if (A.length() > B.length())
        return addBinary(B, A);
  
    // Calculating the difference between 
    // the length of the two strings.
    int diff = B.length() - A.length();
  
    // Initialise the padding string which 
    // is used to store zeroes that should 
    // be added as prefix to the string which 
    // has length smaller than the other string.
    string padding;
    for (int i = 0; i < diff; i++)
        padding.push_back('0');
  
    A = padding + A;
    string res;
    char carry = '0';
  
    for (int i = A.length() - 1; i >= 0; i--) 
    {
        // This if condition solves 110 111 
        // possible cases
        if (A[i] == '1' && B[i] == '1'
        {
            if (carry == '1')
                res.push_back('1'), carry = '1';
            else
                res.push_back('0'), carry = '1';
        }
  
        // This if condition solves 000 001 
        // possible cases
        else if (A[i] == '0' && B[i] == '0'
        {
            if (carry == '1')
                res.push_back('1'), carry = '0';
            else
                res.push_back('0'), carry = '0';
        }
  
        // This if condition solves 100 101 010 
        // 011 possible cases
        else if (A[i] != B[i]) 
        {
            if (carry == '1')
                res.push_back('0'), carry = '1';
            else
                res.push_back('1'), carry = '0';
        }
    }
  
    // If at the end their is carry then just  
    // add it to the result
    if (carry == '1')
        res.push_back(carry);
    // reverse the result
    reverse(res.begin(), res.end());
  
    // To remove leading zeroes
    int index = 0;
    while (index + 1 < res.length() && 
           res[index] == '0')
        index++;
    return (res.substr(index));
}
  
// Driver code
int main()
{
    string a = "1101", b = "100";
    cout << addBinary(a, b) << endl;
    return 0;
}


Output: 

10001

Time Complexity: O(max(L1, L2)), where L1 and L2 are the lengths of strings a and b respectively. 

Auxiliary Space: O(max(L1, L2)), where L1 and L2 are the lengths of strings a and b respectively. 



Last Updated : 17 Jan, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads