风扫地 发表于 2019-5-23 17:48:41

067_二进制求和

/*
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 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 - 0x30 + shorterstr - 0x30 + carry_flag;
      }
      else
      {
            temp = longerstr - 0x30 + carry_flag;
      }
      longerstr = 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 = '1';
      for(i = 1; i <= max_len ; i++)
      {
            pointer2 = longerstr;
      }
      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 分钟之前
*/

辣条一侠 发表于 2019-5-30 10:02:23

学习了
页: [1]
查看完整版本: 067_二进制求和