《leetCode》:Add Binary

来源:互联网 发布:大疆地面站软件 编辑:程序博客网 时间:2024/06/05 09:20

题目

Given two binary strings, return their sum (also a binary string).For example,a = "11"b = "1"Return "100".

题目大意:将两个字符串代表的二进制数进行相加运算。

思路

此题也是相当简单的题,直接进行相加就可以了,值得注意的是:两个代表二进制数字的字符相加应该这样:(下面这个错误:自己在做这个题就发生过)

int temp=(ch1-'0')+(ch2-'0');//不要直接写成:int temp=ch1+ch2;char result=temp%2+'0';ci=temp%2;

具体实现代码如下:

char* addBinary(char* a, char* b) {    int len1=strlen(a);    int len2=strlen(b);    //开辟一段空间来保存结果    int len=((len1>=len2)?len1:len2);    char *result=(char *)malloc((len+2)*sizeof(char));//多开辟两个,最后一个用来存储'\0',第一个用来保存最高的进位    result[len+1]='\0';    int i=len1-1;    int j=len2-1;    int ci=0;//表示进位    int index=len;    for(;i>=0&&j>=0;i--,j--){        int temp=(a[i]-'0')+(b[j]-'0')+ci;        result[index]=temp%2+'0';        index--;        ci=temp/2;    }    //如果长度不一样,则还要考虑剩下的这个字符串与进位ci进行相加运算并保存在结果中    char *remainArr;    int k=0;    if(i<0){        remainArr=b;         k=j;    }    else if(j<0){        remainArr=a;        k=i;    }    //将剩余的进行相加运算        for(;k>=0;k--){            int temp=(remainArr[k]-'0')+ci;            result[index]=temp%2+'0';            index--;            ci=temp/2;        }        if(ci>0){//最高位有进位            result[index]=ci+'0';            return result;        }        else{            return result+1;        }}
0 0
原创粉丝点击