Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
题意是给两个二进制字符串进行相加,返回相加的值,类型为string。
这类用字符串来进行求和操作,主要是要字符串相加的时候,要先从两个字符串末尾开始,然后用一个值来保存进位值,就能比较快速的求解。简单的方法就是用一个数组或者vector来保存每个位的值,长度必然为输入字符串中较大的长度加一(考虑进位),然后逆序转换位字符串即可。
string addBinary(string a, string b)
{
int len_a=a.size();
int len_b=b.size();
int len_re=len_a>len_b?(len_a+1):(len_b+1);
int fur=0;
len_a--;
len_b--;
vector<int> r(len_re,0);//保存每一位的值
for(int i=0;i<len_re;i++)
{
int t1=0;
if(i<=len_a)
{
t1=a[len_a-i]-'0';
}
int t2=0;
if(i<=len_b)
{
t2=b[len_b-i]-'0';
}
int t=t1+t2+fur;
//t=0,1,2,3
r[i]=(t%2);
if(t>1)//进位
fur=1;
else//不进位也要考虑,否则fur一直为1
fur=0;
}
string re;
int start=r.size()-1;
if(r[start]==0)//只有最后一位可能会出现0的情况
{
start--;
}
for(int i=start;i>=0;i--)
{
re+=static_cast<char>(r[i]+'0');
}
return re;
}