Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
C++
class Solution {
public:
string addBinary(string a, string b) {
if(a.size()<b.size())
return addBinary(b,a);
//给res分配空间
string res(max(a.size(),b.size()),'0');
int carry=0,x=0,y=0;
int i=0;
//处理进位,移位
int ib=b.size()-1;
for(i=a.size()-1;i>=0;i--)
{
x=a[i]-'0';
int temp=ib;
y=ib-->=0?b[temp]-'0':0;
res[i]=(x+y+carry)%2+'0';
carry=(x+y+carry)>=2?1:0;
}
if(carry==1) res='1'+res;
return res;
}
};
C
char* addBinary(char* a, char* b) {
if(strlen(a)<strlen(b))
return addBinary(b,a);
//给res多分配一位用来存结束标记
char *res=(char*)malloc(sizeof(char)*(strlen(a)+2));
res[strlen(a)+1]='\0';
int carry=0,x=0,y=0;
int i=0;
int w=0;
//ib用来保存b中的索引
int ib=strlen(b)-1;
for(i=strlen(a)-1;i>=0;i--)
{
x=a[i]-'0';
int temp=ib;
//若b中没取完,则取b中的值,反之直接填充0
y=ib-->=0?b[temp]-'0':0;
//修改进位,移位
//保存到res[i+1]。res[0]用来表示最后的进位,保留
res[i+1]=(x+y+carry)%2+'0';
carry=(x+y+carry)>=2?1:0;
}
//若最终进位为1,直接将1存到res最高位
if(carry==1) res[0]=carry+'0';
//若最终没有进位,则处理高位为0的情况。高位0不输出
else
{
i=1;
//高位有多少0
while(res[i]=='0')
{
i++;
}
w=i;
//处理最后全零的结果
if(i==strlen(res))
{
res[0]='0';
res[1]='\0';
}
//将首个非零的位往前移位
else
{
for(i=0;i<strlen(res)-w;i++)
{
res[i]=res[i+1];
}
res[i]='\0';
}
}
return res;
}