Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
思路:
1、两个输入时字符串,要变成数字,最后返回字符串。
2、进位的问题,相加的时候,是否产生进位,进位标志表示,进位则是1,否则为0,
怎么判断进位,假设两个位置的数相加,若果 a+b>1表示进位了,所以我们可以用(a+b)/2表示,,
3、‘进位后的数字的表示,例如1+1=0;,,1+1+1=1; 因为二进制数是逢2进1,我们用(a+b)%2,,就可以得到进位后的数据
4、假设两个字符串的长度不一样,,两个字符串相加时产生的进位还对长的字符串有影响,在字符串的最后一位的时候,假设产生了进位,
则字符串的长度会增加,,这个怎么判断? 这是我们可以把进位的数直接加载字符串中。
主要是注意进位标志,,是否产生了进位。。。。
class Solution {
public:
string addBinary(string a, string b) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int flag = 0;
int aIndex = a.size() - 1;
int bIndex = b.size() - 1;
string c;
while(aIndex >= 0 && bIndex >= 0)
{
int num = a[aIndex] - '0' + (b[bIndex] - '0') + flag;
flag = num / 2;
num %= 2;
c = (char)(num + '0') + c;
aIndex--;
bIndex--;
}
while(aIndex >= 0)
{
int num = a[aIndex] - '0' + flag;
flag = num / 2;
num %= 2;
c = (char)(num + '0') + c;
aIndex--;
}
while(bIndex >= 0)
{
int num = b[bIndex] - '0' + flag;
flag = num / 2;
num %= 2;
c = (char)(num + '0') + c;
bIndex--;
}
if (flag > 0)
c = (char)(flag + '0') + c;
return c;
}
};
public class Solution {
public String addBinary(String a, String b) {
int carry = 0;
String s = "";
int i, j;
for (i = a.length() - 1, j = b.length() - 1; i >= 0 && j >= 0; i--, j--) {
int sum = carry + a.charAt(i) - '0' + b.charAt(j) - '0';
if (sum == 0) {
s = '0' + s;
carry = 0;
} else if (sum == 1) {
s = '1' + s;
carry = 0;
} else if (sum == 2) {
s = '0' + s;
carry = 1;
} else {
s = '1' + s;
carry = 1;
}
}
if (i >= 0)
return prepend(s, a, i, carry);
else if (j >= 0)
return prepend(s, b, j, carry);
if (carry == 1)
return "1" + s;
return s;
}
private String prepend(String s, String a, int i, int carry) {
if (carry == 0)
return a.substring(0, i + 1) + s;
for (; i >= 0; i--) {
if (carry == 1) {
if (a.charAt(i) == '1') {
s = '0' + s;
carry = 1;
} else {
s = '1' + s;
carry = 0;
}
} else {
if (a.charAt(i) == '1') {
s = '1' + s;
carry = 0;
} else {
s = '0' + s;
carry = 0;
}
}
}
if (carry == 1) {
s = '1' + s;
}
return s;
}
}
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string addbinary(string& a, string& b);
int main()
{
string a = "111";
string b = "11";
string result = addbinary(a, b);
cout << result << endl;
system("pause");
return 0;
}
string addbinary(string& a, string& b)
{
int m = a.size()-1;
int n = b.size()-1;
int flag = 0;
string temp;
while (n>= 0 && m>= 0)
{
int num = a[m] - '0' + b[n] - '0' + flag;
if (num > 1)
{
temp.insert(temp.begin(), (char)(num%2+'0'));
flag = 1;
}
else
{
temp.insert(temp.begin(), (char)(num%2+'0'));
flag = 0;
}
m--;
n--;
}
while (m >= 0)
{
int num = a[m] - '0' + flag;
temp.insert(temp.begin(), (char)(num%2+'0'));
flag = num/2;
m--;
}
while (n >= 0)
{
int num = b[n] - '0' + flag;
temp.insert(temp.begin(), (char)(num%2 + '0'));
flag = num / 2;
n--;
}
if (flag)
temp.insert(temp.begin(), (char)('1'));
return temp;
}