版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
二进制求和
题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
解题思路:这一题刚开始就在考虑,C语言,返回数组的长度怎么来确定,然后借鉴了别人的做法,使用memcpy()字符串拷贝函数,大体思路和正常的十进制模拟计算一致,这题做的不是很好,有时间再做一遍。
char * addBinary(char * a, char * b){
int len_a,len_b,len,jw,temp,max_size;
len_a=strlen(a);
len_b=strlen(b);
max_size=(len_b>len_a)?(len_b+2):(len_a+2);
char *result=(char *)malloc(sizeof(char)*max_size);
result[max_size-1]='\0';
len=max_size-2;
jw=0;
while(len_a||len_b||jw){
temp=jw;
if(len_a>=1){
temp+=(a[len_a-1]-'0');
len_a--;
}
if(len_b>=1){
temp+=(b[len_b-1]-'0');
len_b--;
}
jw=temp/2;
result[len]='0'+(temp%2);
len--;
}
if(len==0){
char *temp_char=(char *)malloc(sizeof(char)*(max_size-1));
memcpy(temp_char, result + 1, (max_size - 1) * sizeof(char));
free(result);
return temp_char;
}
return result;
}