67.二进制求和
我的思路是,将两个字符串逆序写到新的字符串里,然后把短字符串用0补齐,逐位进行相加进位操作。在执行计算时犯了两处错误,分别在注释有important的地方:
(1)最后写在结果上的数字应该是
a
⊕
b
⊕
a
d
d
{a}\oplus{b}\oplus{add}
a⊕b⊕add
(2)判断每一步的进位:
a
a
a、
b
b
b、
a
d
d
add
add中如果有2个或3个1,则进位为1,否则进位为0
天哪判断的太慢了,这不就是加法器吗,等会回去复习下。
string addBinary(string a, string b) {
string aa="",bb="";
if(a=="0" && b=="0") return "0";
int n1=a.size();int n2=b.size();
for(int i=a.size()-1;i>=0;i--) aa+=a[i];
for(int i=b.size()-1;i>=0;i--) bb+=b[i];
if(n1<n2){
for(int i=n1;i<n2;i++){
aa+='0';
}
}
else if(n1>n2){
for(int i=n2;i<n1;i++){
bb+='0';
}
}
int n=max(n1,n2);
vector<int> tmp; string res="";
int add=0;
for(int i=0;i<n;i++){
tmp.push_back((aa[i]-'0')^(bb[i]-'0')^add);
if(((aa[i]-'0')+(bb[i]-'0')+add)>1) {//important
add=1;
}
else {
add=0;
}
}
if(add==1) {//important
tmp.push_back(1);
n++;
}
for(int i=n-1;i>=0;i--){
res+=tmp[i]+'0';
}
return res;
}