思路1:将a和b先转换成int,转换成10进制,进行相加,结果转换成2进制,结果转换成char类型
放弃原因:题目上并没写a和b的大小和范围,int型有最大上限,可能会溢出
思路2:读取a,b当前位,转换成int进行进位和当前位的判断
放弃原因:转换成Int的过程中和思路3相比不是一个最优解,需要一次char-int和一次int-char的过程
思路3:当char强制转化成Int是对其ascii进行操作,int tmp_a = a[i]-'0',如果a[i]=0,结果为0;如果为1,结果为1
class Solution {
public:
string addBinary(string a, string b) {
int length_a = a.size();
int length_b = b.size();
if(length_a==0) return b;
if(length_b==0) return a;
int length = length_a;
if(length_b > length_a) length = length_b;
int flag = 0;
string c;
for(int i=0; i<length; i++)
{
int tmp_a = 0;
int tmp_b = 0;
if(i<length_a)
tmp_a = a[length_a-1-i]-'0';
if(i<length_b)
tmp_b = b[length_b-1-i]-'0';
char change;
sprintf(&change,"%d",((tmp_a+tmp_b+flag)%2));
c.insert(0,1,change);
flag = (tmp_a+tmp_b+flag)/2;
}
if(flag==1)
{
char change;
sprintf(&change,"%d",flag);
c.insert(0,1,change);
}
return c;
}
};
最开始,先对flag进行赋值,之后才对change进行赋值,这种顺序是不对的。因为flag进行赋值后就表示当前的flag,而change进行计算时,需要用到上一轮的flag,所以先要计算change再计算flag.