Every day a leetcode
题目来源:67. 二进制求和
解法1:模拟
要模拟两个二进制数相加,我们需要从低位往高位运算。
首先我们需要将字符串逆置,从低位相加。
逐项计算各位元素和进位,将结果写入新字符串 ans 中。
代码:
int max(int a,int b)
{
return a>b?a:b;
}
void reverse(char *s)
{
int len=strlen(s);
for(int i=0;i<len/2;i++)
{
char temp;
temp=s[i];
s[i]=s[len-i-1];
s[len-i-1]=temp;
}
}
char * addBinary(char * a, char * b){
reverse(a);
reverse(b);
int n=max(strlen(a),strlen(b));
char *ans;
ans=(char*)malloc((n+2)*sizeof(char));
int add=0;
int len=0;
for(int i=0;i<n;i++)
{
add+=i<strlen(a)?(a[i] == '1'):0;
add+=i<strlen(b)?(b[i] == '1'):0;
ans[len++]=add% 2+'0';
add/=2;
}
if(add) ans[len++]='1';
ans[len]='\0';
reverse(ans);
return ans;
}
结果: