class Solution {
public:
string addBinary(string a, string b) {
int len1=a.size();
int len2=b.size();
int min1=min(len1,len2);
int cf=0;
string s;
reverse(a.begin(),a.end()); // 先逆置
reverse(b.begin(),b.end()); //
for(int i=0;i<min1;i++)
{
if(a[i]=='1'&&b[i]=='1')
{ s=s+char('0'+cf);
cf=1;
}
else if((a[i]=='1'||b[i]=='1')&&cf==1)
{
s=s+'0';
cf=1;
}
else
{
s+=char(a[i]+(b[i]-'0')+cf);
cf=0;
}
}
while(len1>len2)
{
if(a[len2]=='1'&&cf==1)
{s+='0';
cf=1;}
else {
s+=char(a[len2]+cf);
cf=0;}
len2++;
}
while(len1<len2)
{
if(b[len1]=='1'&&cf==1)
{s+='0';
cf=1;}
else {
s+=char(b[len1]+(cf));
cf=0;}
len1++;
}
if(len1==len2&&cf==1)
s+='1';
reverse(s.begin(),s.end());
return s;
}
};
public:
string addBinary(string a, string b) {
int len1=a.size();
int len2=b.size();
int min1=min(len1,len2);
int cf=0;
string s;
reverse(a.begin(),a.end()); // 先逆置
reverse(b.begin(),b.end()); //
for(int i=0;i<min1;i++)
{
if(a[i]=='1'&&b[i]=='1')
{ s=s+char('0'+cf);
cf=1;
}
else if((a[i]=='1'||b[i]=='1')&&cf==1)
{
s=s+'0';
cf=1;
}
else
{
s+=char(a[i]+(b[i]-'0')+cf);
cf=0;
}
}
while(len1>len2)
{
if(a[len2]=='1'&&cf==1)
{s+='0';
cf=1;}
else {
s+=char(a[len2]+cf);
cf=0;}
len2++;
}
while(len1<len2)
{
if(b[len1]=='1'&&cf==1)
{s+='0';
cf=1;}
else {
s+=char(b[len1]+(cf));
cf=0;}
len1++;
}
if(len1==len2&&cf==1)
s+='1';
reverse(s.begin(),s.end());
return s;
}
};