|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- /*
- 给定两个二进制字符串,返回他们的和(用二进制表示)。
- 输入为非空字符串且只包含数字 1 和 0。
- 示例 1
- 输入 a = 11, b = 1
- 输出 100
- 示例 2
- 输入 a = 1010, b = 1011
- 输出 10101
- */
复制代码
Solution1:
- char * addBinary(char * a, char * b){
-
- int len_a = strlen(a);
- int len_b = strlen(b);
- int max_len = len_a > len_b ? len_a : len_b;
- int min_len = len_a > len_b ? len_b : len_a;
- char* longerstr = len_a > len_b ? a : b;
- char* shorterstr = len_a > len_b ? b : a;
- int carry_flag = 0; /* 0 无进位,1有进位*/
- char* pointer2 = NULL;
- int i = 0;
- int temp = 0;
-
-
- carry_flag = 0;
- for(i = max_len-1 ; i >= 0; i--)
- {
- if(max_len - i <= min_len)
- {
- temp = longerstr[i] - 0x30 + shorterstr[i+min_len-max_len] - 0x30 + carry_flag;
- }
- else
- {
- temp = longerstr[i] - 0x30 + carry_flag;
- }
- longerstr[i] = temp % 2 + 0x30;
- if(temp>=2)
- {
- carry_flag = 1;
- }
- else
- {
- carry_flag = 0;
- }
- }
-
- if(carry_flag == 0)
- {
- return longerstr;
- }
- else
- {
- pointer2 = (char*)malloc(sizeof(char)*(max_len+2));
- memset(pointer2,0,sizeof(char)*(max_len+2));
-
- pointer2[0] = '1';
- for(i = 1; i <= max_len ; i++)
- {
- pointer2[i] = longerstr[i-1];
- }
- return pointer2;
- }
- }
复制代码
本地测试代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main()
- {
- char* a = "1";
- char* b = "111";
- char* c = addBinary(a,b);
- printf("a+b = %s\n",c);
-
- free(c);
- c = NULL;
-
- getchar();
- return 0;
- }
复制代码
- 提交测试结果:
- /*
- 执行用时 : 0 ms, 在Add Binary的C提交中击败了100.00% 的用户
- 内存消耗 : 6.9 MB, 在Add Binary的C提交中击败了35.19% 的用户
- 294 / 294 个通过测试用例
- 状态:通过
- 执行用时:0 ms
- 提交时间:0 分钟之前
- */
复制代码
|
|