C++程序 将两个二进制字符串相加

C++程序 将两个二进制字符串相加

给定两个二进制字符串,返回它们的和(也是一个二进制字符串)。

例子:

输入:  a = "11", b = "1"
输出: "100"

思路是从两个字符串的最后一个字符开始,逐一计算数字总和。如果和大于1,则为下一个数字存储进位。

// 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);
  
    // 计算两个字符串长度之间的差。
    int diff = B.length() - A.length();
  
    // 初始化填充字符串,它用于存储应添加为前缀的零,以使其长度小于另一个字符串。
    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--) 
    {
        // 此 if 条件解决了 110 111 可能的情况。
        if (A[i] == '1' && B[i] == '1') 
        {
            if (carry == '1')
                res.push_back('1'), carry = '1';
            else
                res.push_back('0'), carry = '1';
        }
  
        // 此 if 条件解决了 000 001 可能的情况。
        else if (A[i] == '0' && B[i] == '0') 
        {
            if (carry == '1')
                res.push_back('1'), carry = '0';
            else
                res.push_back('0'), carry = '0';
        }
  
        // 此 if 条件解决了 100 101 010 011 可能的情况。
        else if (A[i] != B[i]) 
        {
            if (carry == '1')
                res.push_back('0'), carry = '1';
            else
                res.push_back('1'), carry = '0';
        }
    }
  
    // 如果在最后有进位,就将其添加到结果中。
    if (carry == '1')
        res.push_back(carry);
    // 反转结果
    reverse(res.begin(), res.end());
  
    // 去除前导零
    int index = 0;
    while (index + 1 < res.length() && 
           res[index] == '0')
        index++;
    return (res.substr(index));
}
  
// 驱动程序
int main()
{
    string a = "1101", b = "100";
    cout << addBinary(a, b) << endl;
    return 0;
}  

输出:

10001

时间复杂度 :O(max(L1,L2)),其中L1和L2分别为字符串a和b的长度。

辅助空间 :O(max(L1,L2)),其中L1和L2分别为字符串a和b的长度。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例