给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-binary
思路:先顺序求和,再逆转,适应进位情况
void reserve(char *s,int len)
{
int i=0;
for(;i<len/2;i++)
{
//异或运算实现两数交换
s[i]=s[i]^s[len-i-1];
s[len-i-1]=s[i]^s[len-i-1];
s[i]=s[i]^s[len-i-1];
}
}
char * addBinary(char * a, char * b){
int len1=0,len2=0,len=0;
int i=0,carry=0;
char *p=a;
while(*p)
{
len1++;
p++;
}
p=b;
while(*p)
{
len2++;
p++;
}
len=len1<len2?len2:len1;
p=(char *)malloc(len+2);
while(i<len)
{
carry += i < len1 ? (a[len1-i-1] == '1') : 0;
carry += i < len2 ? (b[len2-i-1] == '1') : 0;
p[i++] = carry % 2 + '0';
carry /= 2;
}
if (carry) {
p[i++] = '1';
}
p[i] = '\0';
reserve(p,i);
return p;
}