这题总体思路有点像两个线性表的合并,有个知识点花了很长时间,函数传回字符串,详见上一篇
char *S(char *b) { char *s; return s; }
这个s是传不回去的,因为在函数体里面定义,是局部变量。
#include <stdio.h> #include <stdlib.h> #include <string.h> char *addBinary(char * a, char * b) { int lena,lenb,len=0,num_a,num_b,i,j,jin=0; int s[100]; char ss[100]; lena=strlen(a); lenb=strlen(b); i=lena-1; j=lenb-1; //printf("a%d b%d\n",lena,lenb); while(i!=-1&&j!=-1) { num_a=a[i]-'0'; num_b=b[j]-'0'; s[len]=(num_a+num_b+jin)%2; jin=(num_a+num_b+jin)/2; len++; i--; j--; } while(i!=-1) { num_a=a[i]-'0'; s[len]=(num_a+jin)%2; jin=(num_a+jin)/2; len++; i--; } while(j!=-1) { num_b=b[j]-'0'; s[len]=(num_b+jin)%2; jin=(num_b+jin)/2; len++; j--; } if(jin==0) { for(i=len-1;i>=0;i--) ss[len-i-1]=s[i]+'0'; ss[len]='\0'; } else { for(i=len-1;i>=0;i--) ss[len-i]=s[i]+'0'; ss[0]='1'; ss[++len]='\0'; } a=ss; puts(a); return a; } int main() { char a[]= "11", b[] = "1"; // printf("a%d b%d\n",a,b); //char *ss; printf("%s\n",a); return 0; }