我确实比较水,所以费尽千辛玩苦终于挑了一个好想比较简单的题,结果没想到还是不行...
初始想法:
设两个字符串分别为at和b,然后把他们两个转成整形后相加(每一位有三种可能,0,1,2),然后根据所得结果决定是否要进位,结束后输出字符串。
程序如下所示,能通过几个案例,可是因为整形取值空间不够,所以输入很大时候就没辙了。
class Solution {
public:
string addBinary(string a, string b) {
long long first,second,sum,temp=0;
string result="1";
char bit[200];
char final[200];
first = atoi(a.c_str());
second = atoi(b.c_str());
sum = first + second;
sprintf(bit,"%lld",sum);
for(int i=strlen(bit)-1;i>=0;i--){
if (bit[i]=='2'&&temp==0) {
final[i]='0';
temp = 1;
}
else if (bit[i]=='2'&&temp==1) {
final[i]='1';
}
else if (bit[i]=='1'&&temp==1) {
final[i]='0';
}
else if (bit[i]=='1'&&temp==0){
final[i]='1';
}
else if (bit[i]=='0'&&temp==0){
final[i]='0';
}
else if (bit[i]=='0'&&temp==1){
final[i]='1';
temp = 0;
}
}
final[strlen(bit)]='\0';
if(temp=1) result += final;
else result = final;
return result;
}
};
为了解决这一问题,我采用遍历字符串然后相加的方式,通过代码如下,感觉上挺烂的,以后会再思考优化方式
class Solution {
public:
string addBinary(string a, string b) {
int big_len,small_len,i=0,j=0,temp=0;
string result="1",big,small;
char bit[200];
char final[200];
if (a.length()>=b.length()){
big = a;small = b;big_len = a.length();small_len = b.length();
}
else{
big = b;small = a;big_len = b.length();small_len = a.length();
}
for(i=big_len-small_len;i<big_len;i++){
bit[i]=big[i]+small[j++]-48;
}
for(i=0;i<big_len-small_len;i++){
bit[i]=big[i];
}
bit[big_len]='\0';
for(i=strlen(bit)-1;i>=0;i--){
if (bit[i]=='2'&&temp==0) {
final[i]='0';
temp = 1;
}
else if (bit[i]=='2'&&temp==1) {
final[i]='1';
}
else if (bit[i]=='1'&&temp==1) {
final[i]='0';
}
else if (bit[i]=='1'&&temp==0){
final[i]='1';
}
else if (bit[i]=='0'&&temp==0){
final[i]='0';
}
else if (bit[i]=='0'&&temp==1){
final[i]='1';
temp = 0;
}
}
final[strlen(bit)]='\0';
if(temp==1) result += final;
else result = final;
return result;
}
};