这就是一个二进制的加法题,两个数都是string的形式,这种题首先要把两个字符串变得长度一致(短的那个前面补0),然后再根据二进制的加法法则进行处理就行了,注意二进制的两位相加总共有四种答案,0(0+0),1(1+0 / 0+1),2(1+1),3(1+1+1(进位得来的))。要分成三种情况进行考虑:
无进位直接保留答案:0、1
进位且保留0:2
进位且保留1:3
以此来做这道题:
string addBinary(string a, string b) {
string long_str = a.size()>b.size()?a:b;
string short_str = a.size()>b.size()?b:a;
while(short_str.size()<long_str.size()){
short_str = '0'+short_str;
}
string temp = "";
string ans = "";
int sum = 0;
for(int i = long_str.size()-1;i >= 0;i--){
sum += (long_str[i]-'0')+(short_str[i]-'0');
if(sum == 2){
temp+='0';
sum = 1;
}else if(sum == 3){
temp+='1';
sum = 1;
}else{
cout<<"here "<<sum<<endl;
temp+=sum+'0';
sum = 0;
}
}
if(sum == 1)
temp+='1';
for(int i =temp.size()-1;i>=0;i--){
ans+=temp[i];
}
return ans;
}
注意
string long_str = a.size()>b.size()?a:b;
string short_str = a.size()>b.size()?b:a;
这里要使得当两个字符串长度一致时,long和short要取不同的字符串。否则遇到1+0或者0+1的时候代码回弄成1+1或者0+0.