前言:这是我们大学社团给我们大一新生布置的每日一题任务,因为本人编程理解有限,参考价值较低。
题目链接https://leetcode-cn.com/classic/problems/add-binary/description/ 二进制求和,考察字符串应用,可以乘此学一波位运算。
位运算:
&且 1&1 == 1,其余为0
|或 0|0 == 0,其余为1
^异或 1^0 == 0^1 == 1 , 0^0 == 1^1 == 0
~取反(基本不用) ~1011101== 0100010
!否 这个不用解释了吧
然后依次计算就可以了,不要忘记进位就好,下面是AC代码:
class Solution {
public:
void turn(string& s){ //将字符串倒置,以便按位运算
string t;
for(int i=int(s.size())-1;i>=0;i--){
t += s[i];
}
s = t;
}
string addBinary(string a, string b) {
int l1 = a.size() , l2 = b.size() , m = max(l1,l2);
string ans;
bool bo=false; //bo用于判断进位
turn(a);
turn(b);
for(int i=0;i<m;i++){
int t = bo + (l1<i ? 0:a[i]-'0') + (l2<i ? 0:b[i]-'0');
bo = t&(1<<1); //1<<1就是2^1==2==10(2)
ans += t&1 ? '1':'0';
}
if(bo)ans += '1'; //如果最后一位能进位就加上
turn(ans);
return ans;
}
};
在做完这道题之后,我们就可以了解一下高精度算法了,思路是一样的。