Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return ”100”.
思路:
1.从末位开始加,可以先string.reverse,这样可以顺序操作。
2.数字串和数字的转换。a[i]-'0'得出的是a[i]对应的int;val+'0'得出的就是val对应的string.
3.得到的结果往字符串前面插入,保证末位的数字在最后面。
4.考虑进位。
#include <iostream>
#include <string>
using namespace std;
string addBinary(string a,string b)
{
//从末位开始加,先将string reverse
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int carry = 0;
int val = 0;
int i = 0;
int j = 0;
int ai = 0;
int bj = 0;
string s;
while(i<a.size()&&j<b.size())
{
ai = a[i] - '0';
bj = b[j] - '0';
val = (carry+ai+bj)%2;
carry = (carry+ai+bj)/2;
s.insert(s.begin(),val+'0');
i++;
j++;
}
while(i<a.size())
{
ai = a[i] - '0';
val = (carry+ai)%2;
carry = (carry+ai)/2;
s.insert(s.begin(),val+'0');
i++;
}
while(j<b.size())
{
bj = b[j] -'0';
val = (carry+bj)%2;
carry = (carry+bj)/2;
s.insert(s.begin(),val+'0');
j++;
}
if(carry>0)
{
s.insert(s.begin(),carry+'0');
}
return s;
}
void main()
{
string a = "111";
string b = "101";
string s = addBinary(a,b);
printf("The string s is %s.\n",s.c_str());
}