题目
给定两个二进制字符串,,返回它们的加和(也是一个二进制字符串的形式)。
例如:
a = "11"
b = "1"
返回 "100"
这是一道经典的题目,本身算法上并没有难度。要点是通过数组模拟加法,一级一级的往上加,注意处理进位。
代码
#include<iostream>
#include<string>
using namespace std;
string addBinary(string a, string b){
int carry = 0;
string result;
for(int i=a.size()-1, j=b.size()-1; i>=0 || j>=0; --i,--j)
{
int ai = i>=0 ? a[i]-'0' : 0;
int bj = j>=0 ? b[j]-'0' : 0;
int val = (ai + bj + carry) % 2;
carry = (ai + bj + carry) / 2;
result.insert(result.begin(), val+'0');
}
if(carry == 1)
result.insert(result.begin(), '1');
return result;
}
void main(){
string a,b;
cin >> a;
cin >> b;
cout << addBinary(a,b) << endl;
}