原题:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
代码如下:
char* addBinary(char* a, char* b) {
if(a==NULL)
return b;
if(b==NULL)
return a;
if(strlen(a) < strlen(b))
{
char *t;
t = a;
a = b;
b = t;
}
int t=strlen(a)-strlen(b);
int m=strlen(b);
char *result;
result=(char *)malloc(sizeof(char)*(strlen(a)+2));
*(result+strlen(a)+1)='\0';
int flag=0;
int k;
int sum;
for(k=strlen(a); k>t; k--)
{
sum=flag+(int)(*(a+k-1)-'0')+(int)(*(b+k-t-1)-'0');
if(sum>0)
{
if(sum==1)
{
flag=0;
*(result+k)='1';
}
else if(sum==2)
{
flag=1;
*(result+k)='0';
}
else
{
flag=1;
*(result+k)='1';
}
}
else
{
*(result+k)='0';
flag=0;
}
}
for(; k>0 ; k--)
{
if((flag==1&&*(a+k-1)=='1')||((flag==0&&*(a+k-1)=='0')))
{
*(result+k)='0';
continue;
}
*(result+k)='1';
flag=0;
}
if(flag==0)
{
result=result+1;
}
else
{
*result='1';
}
return result;
}
思路就是分两段,一个是重叠的,一个不重叠的。做三个数的加法就好。
效率感人/捂脸笑
感觉是服务器抽风了。。。