題目
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
分析
計算兩個二進(jìn)制數(shù)之和锹安,思路和代碼類似于大整數(shù)相加鸟妙,只是十進(jìn)制改為二進(jìn)制,對應(yīng)位數(shù)字相加,將進(jìn)位進(jìn)上去。
需要注意的是""+"",""+"0","0"+"1"幾個特殊的情況宣赔。
char* addBinary(char* a, char* b) {
int alength=0,blength=0;
while(a[alength]!='\0')
alength++;
while(b[blength]!='\0')
blength++;
if(alength==0&&blength==0)
{
return "0";
}
char *ans=(char *)malloc(sizeof(char)*(alength+blength+1));
int anslength=0;
int temp=0,i=0;
while(i<alength&&i<blength)
{
temp=temp+a[alength-i-1]-'0'+b[blength-i-1]-'0';
if(temp>1)
{
ans[alength+blength-1-anslength]=temp%2+'0';
temp=temp/2;
}
else
{
ans[alength+blength-1-anslength]=temp+'0';
temp=0;
}
anslength++;
i++;
}
while(i<alength)
{
temp=temp+a[alength-i-1]-'0';
if(temp>1)
{
ans[alength+blength-1-anslength]=temp%2+'0';
temp=temp/2;
}
else
{
ans[alength+blength-1-anslength]=temp+'0';
temp=0;
}
anslength++;
i++;
}
while(i<blength)
{
temp=temp+b[blength-i-1]-'0';
if(temp>1)
{
ans[alength+blength-1-anslength]=temp%2+'0';
temp=temp/2;
}
else
{
ans[alength+blength-1-anslength]=temp+'0';
temp=0;
}
anslength++;
i++;
}
if(temp>0)
{
ans[alength+blength-1-anslength]=temp+'0';
anslength++;
}
printf("%d %d %d\n",alength,blength,anslength);
ans[alength+blength]='\0';
return ans+alength+blength-anslength;
}