二进制求和
6.1 version one
string result = "";
int c = 0, num = 0;
int i = a.size() - 1, j = b.size() - 1;
for (; i >= 0 && j >= 0; i--, j--)
{
num = (a[i] - '0') + (b[j] - '0') + c;
c = num / 2;
num = num % 2;
result += ('0' + num);
}
for (; i >= 0; i--)
{
num = (a[i] - '0') + c;
c = num / 2;
num = num % 2;
result += ('0' + num);
}
for (; j >= 0; j--)
{
num = (b[j] - '0') + c;
c = num / 2;
num = num % 2;
result += ('0' + num);
}
if (c != 0)
{
result += ('0' + c);
}
i = 0; j = result.size() - 1;
while (i < j)
{
char temp = result[i];
result[i] = result[j];
result[j] = temp;
i++; j--;
}
return result;
6.2 version two
算法描述:
string addBinary(string& s1, string& s2)
1:将s1和s2变为等长字符串,较短的在前置位补0;
2:string temp = s1 & s2;
string carry;carry数组为进位统计数组。
如:s1 = 101, s2 = 001; 则 temp = 100, carry = 010;
3:s1 = temp; s2 = c; 递归调用addBinary(s1,s2);
4: if(carry == 0) return s1;