二进制求和
题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 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;
}