为什么越界
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 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: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 我不理解
https://fishc.com.cn/thread-218109-1-1.html
人造人 发表于 2022-9-27 20:21
我不理解
https://fishc.com.cn/thread-218109-1-1.html
{:5_104:} 人造人 发表于 2022-9-27 20:21
我不理解
https://fishc.com.cn/thread-218109-1-1.html
我错了,我怕把你问烦了{:10_266:} 所以又开了一个问题 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;
}
人造人 发表于 2022-9-27 20:55
你好,再打扰一下,这道题是力扣上一道简单题 https://leetcode.cn/problems/add-binary/
我想问的是我这里哪里错了,可以帮我指出来一下吗,我知道你这样是对的 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;
} 人造人 发表于 2022-9-27 21:39
这是在做什么?我是没看懂
你好,这是我原来的代码,我是想将二进制的a转换为十进制存储在sum中,我不知道转为整型需要加‘0’;
现在已经改正了。 for(i=0;i<length1;i++)
{
sum1=sum1*2;
sum1+=a-'0';
}
麻烦辛苦看一下我这个帖子一楼现在改过的代码,为什么在力扣这道题里还是报错。万分感谢 addendum777 发表于 2022-9-27 23:13
你好,这是我原来的代码,我是想将二进制的a转换为十进制存储在sum中,我不知道转为整型需要加‘0’;
...
这里又在做什么?
for(i = 0; d >= 2; i++) {
c = sum % 2 + '\0'; // 这是什么?
d = sum / 2;
}
人造人 发表于 2022-9-28 00:11
这里又在做什么?
这是把它们两个的和转换为二进制 addendum777 发表于 2022-9-29 10:32
这是把它们两个的和转换为二进制
这样可以转吗?
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]