Skip to content

Latest commit

 

History

History
 
 

066. Add Binary

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

这道题从思路上算是简单题,但处理的时候细心一点,没太大问题。

两个字符串,肯定从尾部开始迭代起,时刻计算三个东西:a 的当前位(abit),b 的当前位(bbit),进位(carry)。

那么计算后 ret 的当前位即为:

// 奇数为1,偶数为0
ret = (abit + bbit + carry) & 0x1 : "1" : "0" + ret;
//  或者可以直接使用 XOR
ret = abit ^ bbit ^ carry : "1" : "0" + ret;

计算后进位即为:

carry = abit + bbit + carry >= 2; // 只需判断是否大于2即可

最后,迭代的时候要注意,短的字符串迭代完,继续判断长的字符串,若长短都判断完,还有进位要判断。故循环条件显然应该是:apos || bpos || carry,不存在的当前位,用 0x0 来替代运算即可。

为了节省字节数,我使用的 bool 来进行全程操作,你也可以采用 short or int.