408. 二进制求和
题目:
给定两个二进制字符串,返回他们的和(用二进制表示)。
样例
样例 1:
输入:
a = “0”, b = “0”
输出:
“0”
样例 2:
输入:
a = “11”, b = “1”
输出:
“100”
思路:
刚拿到手的时候,心想就是一个二进制而已,写一个二进制相加就行了,但是上手的时候坑就特别多了。
1.我踩的第一个坑:我心里想着是从个位相加,但是并没有代码却是分别都从下标为0开始相加,这是一个大坑;
2.第二个坑:两个字符串长度不等的时候怎么做呢?我一开始想到的是先算重叠部分,后面再相加,但是实现起来就很晕了。
3.第三个坑:这是基本功的问题,一开始int直接强制转化成char,用的是char(a),可是一直乱码;后面直接用char(a+‘0’);于是乎我是一直把强制转化想简单了,以为直接用就了,其实是利用ASCII做的转换。char(1)是把1转换为ASCII为1的字符;我一直一位是把1转化成1;
接下来讲讲大概的思路:
第一步:我们要把字符转化成数字,并且做一个二进制相加;
第二部:在转换成数字的时候需要注意一个点,字符串长短不一的时候如何处理。我的做法是用字符串的长度length-1做自减,如果等于0说明是最后一个,小于0则这个字符串已经结束,那么接下来的每次运算,直接给一个0,最后跳出循环的条件则是两个长度都为负。
第三部,最后快结束的时候还要看看最后的进位flag是否为1,为1的话还在最前面加个1。
最后附上代码:在这里插入代码片
string addBinary(string &a, string &b) {
// write your code here
int c,d,e,flag;
string sum="";
int i=a.size()-1,j=b.size()-1;
for(;i>=0||j>=0;i--,j--)
{
if(i<0) c=0;
else c=a[i]-'0';
if(j<0) d=0;
else d=b[j]-'0';
if(flag==1)
{
e=c+d+1;
flag=0;
}
else e=c+d;
if(e>=2)
{
sum=char((e-2)+'0')+sum;
flag=1;
}else sum=char(e+'0')+sum;
}
if(flag==1) sum='1'+sum;
return sum;
}
```