二进制求和(小白看题)

二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)
输入为 非空 字符串且只包含数字 1 和 0

#define N 1000
char * addBinary(char * a, char * b){
int len1 = strlen(a),len2 = strlen(b),carry = 0,k = 0;
int i,j;
char *c = (char *)malloc(sizeof(char)*N);
//核心代码,从右往左进行运算
for(i = len1 - 1,j = len2 - 1;i >= 0 || j >= 0 || carry;–i,–j){
//很可能有a,b数组长度不等的时候,所以会有i,j小于0的情况,这时直接把该位置为0即可
int x = i < 0 ? 0 : a[i] - ‘0’;
int y = j < 0 ? 0 : b[j] - ‘0’;

    int sum = (x + y + carry) % 2;  //存入数组中的值

    carry = (x + y + carry) / 2;    //进位
    c[k++] = sum + '0';
}
c[k] = '\0';    //结束字符

//翻转字符串
for(i = 0,j = k - 1;i < j;i++,j--){
    char cc = c[i];
    c[i] = c[j];
    c[j] = cc;
}
return c;

}

作者:qhu_
来源:力扣(LeetCode)
在这里插入图片描述

char * addBinary(char * a, char * b){
int length,length1=strlen(a),length2=strlen(b),sum=0,i=length1-1,j=length2-1,k,num;
if(length1>length2)
length=length1+1;
else
length=length2+1;
char *c=(char )malloc(sizeof(char)(length+1));
c[0]=‘0’;c[length]=’\0’;
k=length-1;
while(i>-1||j>-1||sum)
{
num=(i>-1?a[i]-‘0’:0)+(j>-1?b[j]-‘0’:0)+sum;
sum=0;
if(num>1)
{
sum=1;
num-=2;
}
c[k–]=num+‘0’;
j–;i–;
}
if(c[0]==‘0’)
{
for(i=0;i<length-1;i++)
c[i]=c[i+1];
c[length-1]=’\0’;
}
return c;
}

作者:wei-ai-mai-xiao-cai
来源:力扣(LeetCode)
在这里插入图片描述
体会:
1.自己写没写出来,看了大家的答案感觉自己好菜,路漫漫其修远兮。
2.发现除了c其他编程语言很多都比c的答案要简单,不过都说c语言是基础,先把c学好比较重要。
3.发现程序里很多用法自己不太熟悉。
4.上面俩种方法都能得出结果,但是执行用时有快有慢。
5.评论区也有人说道内存泄漏的问题(作为纯小白感觉。。。要写个好代码真不容易)
6.关于其他技术上的问题,暂时还没想到

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值