67. 二进制求和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
string StringTopic::addBinary(string a, string b)
{
//模拟运算
string res;
ranges::reverse(a);
ranges::reverse(b);

int n = max(a.length(), b.length()), carry = 0;
for (int i = 0; i < n; i++)
{
carry += i < a.length() ? (a[i] == '1') : 0;
carry += i < b.length() ? (b[i] == '1') : 0;
res.push_back(carry % 2 ? '1' : '0');
carry /= 2;

}

if (carry)
{
res.push_back('1');
}

ranges::reverse(res);
return res;
}