题目
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
题目大意:将两个字符串代表的二进制数进行相加运算。
思路
此题也是相当简单的题,直接进行相加就可以了,值得注意的是:两个代表二进制数字的字符相加应该这样:(下面这个错误:自己在做这个题就发生过)
int temp=(ch1-'0')+(ch2-'0');//不要直接写成:int temp=ch1+ch2;
char result=temp%2+'0';
ci=temp%2;
具体实现代码如下:
char* addBinary(char* a, char* b) {
int len1=strlen(a);
int len2=strlen(b);
//开辟一段空间来保存结果
int len=((len1>=len2)?len1:len2);
char *result=(char *)malloc((len+2)*sizeof(char));//多开辟两个,最后一个用来存储'\0',第一个用来保存最高的进位
result[len+1]='\0';
int i=len1-1;
int j=len2-1;
int ci=0;//表示进位
int index=len;
for(;i>=0&&j>=0;i--,j--){
int temp=(a[i]-'0')+(b[j]-'0')+ci;
result[index]=temp%2+'0';
index--;
ci=temp/2;
}
//如果长度不一样,则还要考虑剩下的这个字符串与进位ci进行相加运算并保存在结果中
char *remainArr;
int k=0;
if(i<0){
remainArr=b;
k=j;
}
else if(j<0){
remainArr=a;
k=i;
}
//将剩余的进行相加运算
for(;k>=0;k--){
int temp=(remainArr[k]-'0')+ci;
result[index]=temp%2+'0';
index--;
ci=temp/2;
}
if(ci>0){//最高位有进位
result[index]=ci+'0';
return result;
}
else{
return result+1;
}
}