开发者社区 问答 正文

添加两个二进制数字字符串-C

我知道Internet上,尤其是Stack上有很多有关此问题的信息-但我仍然受阻。

给定两个二进制数字字符串-我们必须将它们的二进制和作为字符串返回。

实际上,我认为我和这个人有同样的问题:在C中填充和添加二进制字符串

但是我进行了一些添加和更改,如下所示:

    // This function validates the two strings are really representing two binary number, and we keep the size of each
int isNum(const char* num, int* sizeOfNum) {
  *sizeOfNum = 0;
  while (*num != '\0') {
    if (*num != '0' || *num != '1') {
      return 0;
    }
    *sizeOfNum += 1;
  }
  return 1;
}

char* sumOfBinString(const char* num1, const char* num2) {

    int* sizeOfNum1 = (int*)(malloc(sizeof(int));
    int* sizeOfNum2 = (int*)(malloc(sizeof(int));

    if (isNum(num1, sizeOfNum1) && isNum(num2, sizeOfNum2)) {

        if (*sizeOfNum1 > *sizeOfNum2) {
          int size = (*sizeOfNum1);
        }
        else {
          int size = (*sizeOfNum2);
        }
    }

        //This 'size' is actually the size of the longer binary number string, and plus one for the null-terminator
    char *num1Copy = (char *)malloc((size+1) * sizeof(char));
    char *num2Copy = (char *)malloc((size+1) * sizeof(char));

    int i;
    for(i = size; i >= 0; i--)
    {
      num1Copy[i] = '0';
      num2Copy[i] = '0';
    }

    for (i = *sizeOfNum1; i >= 0; i--)
      if (i == 0 && num1Copy[i]=='1') //Two's complement
        num1Copy[i] = '1';
      else
        num1Copy[size - i] = num1[*sizeOfNum1-i];

    for (i = *sizeOfNum2; i >= 0; i--)
      if (i == 0 && num2Copy[i]=='1') //Two's complement
        num2Copy[i] == '1';
      else
        num2Copy[size - i] = num2[*sizeOfNum2-i];
}

但是我不知道如何从这里继续,因为在某些情况下,进位可能会溢出,因此我需要将该数字“加”为MSB。

有人可以帮我从这里继续吗?

展开
收起
kun坤 2019-11-29 11:34:59 423 分享 版权
1 条回答
写回答
取消 提交回答
  • 首先:

    int* sizeOfNum1 = (int*)(malloc(sizeof(int));
    int* sizeOfNum2 = (int*)(malloc(sizeof(int));
    
    if (isNum(num1, sizeOfNum1) && isNum(num2, sizeOfNum2)) {
    
        if (*sizeOfNum1 > *sizeOfNum2) {
          int size = (*sizeOfNum1);
        }
        else {
          int size = (*sizeOfNum2);
        }
    }
    
    

    您不需要为bsc大小使用指针,这很容易忘记free之后的内存或遇到其他问题。您可以在int上执行此操作:

        int sizeOfNum1=0,sizeOfNum2=0;
    
        if (isNum(num1, &sizeOfNum1) && isNum(num2, &sizeOfNum2)) { //if u add & isNum can modify sizeofNum1 by itself (You give address of variable to function)
    
            if (sizeOfNum1 > sizeOfNum2) {
              int size = sizeOfNum1;
            }
            else {
              int size = sizeOfNum2;
            }
        }
    对于像在学校一样添加的背后的数学:
    
        111--- //carry line
          1100
       + 10100
        ------
        100000
    
    

    在循环中,每个sizeOfNum都有2个itteritter,当它达到0时,您只向输出中添加一个更长的长度(例如,您需要随时检查进位的OFC记住,例如在1100 itterator结束进位时仍为1)因此,您需要当心)此处的一些指南:

    int i,j;    
    i=(size==sizeOfNum1)?size:sizeOfNum2;
    j=((i==sizeOfNum1)&&(i==size))?sizeOfNum2:sizeOfNum1;
    for(;i>=0;i--,j--){
       //here you are adding
    }
    
    2019-11-29 11:35:27
    赞同 展开评论
问答地址: