C++程序 将两个二进制字符串相加
在编程中,我们可能经常需要将两个二进制字符串相加。C++作为一种常用的编程语言,可以很轻松地实现这个功能。在本文中,我们将介绍如何使用C++编写代码实现将两个二进制字符串相加的程序。
问题描述
题目要求我们实现一个函数,输入两个字符串(均为二进制字符串,即只含有0和1的字符串),输出它们相加的结果(同样为二进制字符串)。其中字符串长度不超过10^4。
例如,输入字符串 “1010” 和字符串 “110”, 输出字符串 “10000”。
思路
我们可以使用字符串来存储待相加的二进制数,然后逐位相加并将结果存入新的字符串中。具体的,我们可以对两个字符串的最低位(即字符串末尾处)相加,并将结果存入一个结果字符串中。紧接着,我们将两个字符串向前移一位,再逐位相加并存储到结果字符串当中,如此反复。在结束时,我们还需要判断结果是否有进位(最高位产生进位),并在必要的时候将进位加到结果的最高位上。
以下是示例代码,其中输入的两个字符串通过std::cin获取,输出结果通过std::cout打印。
#include <iostream>
#include <string>
using namespace std;
string addBinaryStrings(string a, string b) {
int len_a = a.size(), len_b = b.size();
int max_len = max(len_a, len_b);
string result(max_len + 1, '0');
int carry = 0;
int i = len_a - 1, j = len_b - 1;
for (int k = max_len; k >= 0; --k) {
int sum = carry;
if (i >= 0) sum += a[i--] - '0';
if (j >= 0) sum += b[j--] - '0';
carry = sum > 1 ? 1 : 0;
result[k] = (sum % 2 == 1 ? '1' : '0');
}
if (result[0] == '0') result.erase(result.begin());
return result;
}
int main() {
string a, b;
cin >> a >> b;
string result = addBinaryStrings(a, b);
cout << result << endl;
return 0;
}
看到这段代码,你可能会产生一个疑问:为什么我们需要在结果字符串中增加额外的一位?这是因为相加过程中,最高位有可能会产生进位。为了避免结果的溢出,我们需要在结果字符串中预留一位,并在程序结束时判断这一位是否为零。
结论
在本文中,我们介绍了如何使用C++编写代码实现将两个二进制字符串相加的程序。具体实现方式是逐位相加,将结果存入一个新的字符串当中,并在最终判断最高位是否需要进位。通过学习这个例子,我们可以加深对于C++字符串操作的理解,提高编程的能力和水平。