赞
踩
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = “11”, b = “1”
输出:“100”
示例 2:
输入:a = “1010”, b = “1011”
输出:“10101”
提示:
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-binary
C(参考了leetcode上别人的做法)
先为新数组申请一块空间,长度为a和b中较长字符串长度加2(一个用来保存可能出现的最高进位,另一个用来保存字符串最后的 ‘\0’ )。
设置一个变量用来表示进位,从两个字符串的末位向前逐位相加,并更新进位位,将两个加数和进位位相加的结果保存到新数组中。
最后判断一下最高位是否有进位,有进位直接返回,没有进位则舍弃最高位的 ‘0’ 。
char * addBinary(char * a, char * b) { int longer=(strlen(a)>strlen(b))?strlen(a):strlen(b); int len=longer+1+1; char *result=(char *)malloc(sizeof(char)*len); result[0]='0'; //初始化最高进位位为0 result[len-1]='\0'; int i=strlen(a)-1,j=strlen(b)-1,k=longer; int c=0; //进位 while(i>=0||j>=0) { int a_bit=(i>=0)?(a[i]-'0'):0; int b_bit=(j>=0)?(b[j]-'0'):0; int sum_bit=a_bit+b_bit+c; result[k]='0'+(sum_bit%2); c=sum_bit/2; i--; j--; k--; } if(c!=0) result[k]='1'; if(result[0]=='0') return result+1; else return result; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。