addendum777 发表于 2022-9-27 16:57:43

为什么越界

void reverse (char *s)
{
    int lens=strlen(s);
    int i,t;
    for(i=0;i<(lens/2);i++)
    {
      t=s;
      s=s;
      s=t;
    }
}


char * addBinary(char * a, char * b){
    int a1=1,b1=1,sum1=0,sum2=0,sum,d=2;
    int i,j;
    int length1,length2;
    length1=strlen(a);
    length2=strlen(b);
      for(i=0;i<length1;i++)
    {   
            sum1=sum1*2;
            sum1+=a-'0';
    }
      
    for(j=0;j<length2;j++)
    {
       sum2=sum2*2;
       sum2+=b-'0';
    }      
            sum=sum1+sum2;
             char *c=(char *)malloc(length1>length2?(length1+2):(length2+2));
    for(i=0;d>=2;i++)
    {
      c=sum%2+'\0';
      d=sum/2;
    }
    reverse(c);
    return c;
}


jackz007 发表于 2022-9-27 18:17:12

本帖最后由 jackz007 于 2022-9-27 19:34 编辑

#include <stdio.h>
#include <stdlib.h>

char * addBinary(char a[] , char b[])
{
      char s = {0} , x1 , x2 , * p                  ;
      int c , d , e , i , n                               ;
      for(c = 0 ; a ; c ++)                            ;// c = a 的长度
      for(d = 0 ; b ; d ++)                            ;// d = b 的长度
      for(i = e = 0 , n = (c < d) ? d : c ; i < n ; i ++) {// 加法计算按长字符串长度安排循环
                s = e                                    ;
                x1 = (i < c) ? a : '0'         ;// 短字符串的不足部分一律按字符 '0' 充数
                x2 = (i < d) ? b : '0'         ;
                s = s + x1 - '0' + x2 - '0'         ;
                e = s / 2                              ;// 2 就是二进制的二
                s %= 2                                 ;// 2 就是二进制的二
      }
      if(e) s = e                                 ;
      p = (char *) malloc(n + 1)                        ;
      for(i = 0 ; i < n ; i ++) p = s + '0' ;
      p = '\0'                                       ;
      return p                                          ;
}

int main(void)
{
      char a = {"11"} , b = {"1"} , * p             ;
      p = addBinary(a , b)                              ;
      printf("%s\n" , p)                                  ;
      free(p)                                             ;
}

jhq999 发表于 2022-9-27 20:19:40

本帖最后由 jhq999 于 2022-9-27 20:23 编辑

#include <stdio.h>
char* sum(char *s1,char *s2)
{
    int i=0,j=0,k=0;
    char* t=NULL;
    for(i=0;s1;i+=1);
    for(j=0;s2;j+=1);
    if(i<j)
    {
      t=s1,s1=s2,s2=t;
      i=i+j,j=i-j,i=i-j;
    }
    i+=1;
    for(k=i;k>0;k-=1)s1=s1;
    s1='0';
    for(k=i;j>=0;j-=1,i-=1)
    {
      s1+=s2-'0';
    }
    for(i=k;i>=0;i-=1)
    {
      if('2'==s1)s1='0',s1+=1;
      else if('3'==s1)s1='1',s1+=1;
    }
    for(i=0;'0'==s1;i+=1);
    return s1+i;
}
int main(void)
{
    char s1={0},s2={0};
    scanf("%s %s",s1,s2);
    printf("%s",sum(s1,s2));
    return 0;
}

110101 111010011
1000001000

人造人 发表于 2022-9-27 20:21:15

我不理解
https://fishc.com.cn/thread-218109-1-1.html

jhq999 发表于 2022-9-27 20:24:59

人造人 发表于 2022-9-27 20:21
我不理解
https://fishc.com.cn/thread-218109-1-1.html

{:5_104:}

addendum777 发表于 2022-9-27 20:49:37

人造人 发表于 2022-9-27 20:21
我不理解
https://fishc.com.cn/thread-218109-1-1.html

我错了,我怕把你问烦了{:10_266:}

addendum777 发表于 2022-9-27 20:50:57

所以又开了一个问题

人造人 发表于 2022-9-27 20:55:07

addendum777 发表于 2022-9-27 20:50
所以又开了一个问题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void reverse(char *s) {
    int lens = strlen(s);
    int i, t;
    for(i = 0; i < (lens / 2); i++) {
      t = s;
      s = s;
      s = t;
    }
}

char *addBinary(char *a, char *b) {
    int sum1 = 0, sum2 = 0, sum;
    int j;
    int length1, length2;
    length1 = strlen(a);
    length2 = strlen(b);
    /*
    for(j = 0; j < length1; j++) {
      a1 = a;
      for(i = length1 - 1; i > 0; i--) {
            a1 = 2 * a1;
      }
      sum1 += a1;
    }
    */
    for(j = 0; j < length1; j++) {
      sum1 *= 2;
      sum1 += a - '0';
    }
    /*
    for(j = 0; j < longth2; j++) {
      b1 = b;
      for(i = longth2; i > 0; i--) {
            b1 = 2 * b1;
      }
      sum2 += b1;
    }
    */
    for(j = 0; j < length2; j++) {
      sum2 *= 2;
      sum2 += b - '0';
    }
    sum = sum1 + sum2;
    char *c = malloc((length1 > length2 ? length1 : length2) + 2);
    /*
    for(i = 0; d >= 2; i++) {
      c = sum % 2 + '\0';
      d = sum / 2;
    }
    */
    char *p = c;
    do {
      *p++ = (sum % 2) + '0';
      sum /= 2;
    } while(sum);
    *p = '\0';
    reverse(c);
    return c;
}

int main(void) {
    char a, b;
    scanf("%32s", a);
    scanf("%32s", b);
    char *c = addBinary(a, b);
    puts(c);
    free(c);
    return 0;
}

addendum777 发表于 2022-9-27 21:32:15

人造人 发表于 2022-9-27 20:55


你好,再打扰一下,这道题是力扣上一道简单题 https://leetcode.cn/problems/add-binary/
我想问的是我这里哪里错了,可以帮我指出来一下吗,我知道你这样是对的

人造人 发表于 2022-9-27 21:39:41

addendum777 发表于 2022-9-27 21:32
你好,再打扰一下,这道题是力扣上一道简单题 https://leetcode.cn/problems/add-binary/
我想问的是我 ...

这是在做什么?我是没看懂

    for(j = 0; j < length1; j++) {
      a1 = a;
      for(i = length1 - 1; i > 0; i--) {
            a1 = 2 * a1;
      }
      sum1 += a1;
    }

addendum777 发表于 2022-9-27 23:13:36

人造人 发表于 2022-9-27 21:39
这是在做什么?我是没看懂

你好,这是我原来的代码,我是想将二进制的a转换为十进制存储在sum中,我不知道转为整型需要加‘0’;
现在已经改正了。 for(i=0;i<length1;i++)
    {   
            sum1=sum1*2;
            sum1+=a-'0';
    }
麻烦辛苦看一下我这个帖子一楼现在改过的代码,为什么在力扣这道题里还是报错。万分感谢

人造人 发表于 2022-9-28 00:11:57

addendum777 发表于 2022-9-27 23:13
你好,这是我原来的代码,我是想将二进制的a转换为十进制存储在sum中,我不知道转为整型需要加‘0’;
...

这里又在做什么?
    for(i = 0; d >= 2; i++) {
      c = sum % 2 + '\0';       // 这是什么?
      d = sum / 2;
    }

addendum777 发表于 2022-9-29 10:32:51

人造人 发表于 2022-9-28 00:11
这里又在做什么?

这是把它们两个的和转换为二进制

人造人 发表于 2022-9-29 12:27:52

addendum777 发表于 2022-9-29 10:32
这是把它们两个的和转换为二进制

这样可以转吗?

人造人 发表于 2022-9-29 12:29:28

addendum777 发表于 2022-9-29 10:32
这是把它们两个的和转换为二进制

    char *c = malloc((length1 > length2 ? length1 : length2) + 2);
    char *p = c;
    do {
      *p++ = (sum % 2) + '0';
      sum /= 2;
    } while(sum);
    *p = '\0';
页: [1]
查看完整版本: 为什么越界