Add Binary

来源:互联网 发布:java二次开发前景怎样 编辑:程序博客网 时间:2024/06/05 14:55

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

思路:  二进制计算都是从本身的最低位开始计算。

              但是字符串是以数组保存的,因此是先计算字符串的最高位,由于比较方便,

             想到了用C++,string.计算长度,高位到低位相加。取carry记住标志位。

           然后每一次的结果都插入到string前面。比较简单,代码如下。 


#ifndef H_CLASS_H_#define H_CLASS_H_#include<string>class Solution{public:string addBinary(string a,string b){string str;//默认为空串if (b.size()>a.size()){string tmp=b;b=a;a=tmp;}int lengthA=a.size();int lengthB=b.size();int BigLength=lengthA>lengthB?lengthA:lengthB;if (BigLength==lengthA)  //A的长度比较大。{//最后一位与最后一位相加..int i=lengthA-1;int j=lengthB-1;int carry=0;int bit_Sum=0;char bitCurrent;while (j>=0) //先加最低位{bit_Sum=(a[i]-'0'+b[j]-'0')+carry; //计算每一位增加的数字if (bit_Sum/2==1)  //1+1//有进位,自己变为2的余数{//之间记录到a[i]里面bitCurrent=('0'+bit_Sum%2);str=bitCurrent+str;//进1,carrycarry=1;}else{bitCurrent=('0'+bit_Sum);str=bitCurrent+str;carry=0;}i--;j--;}while (i>=0){bit_Sum=(a[i]-'0')+carry;if (bit_Sum/2==1)  //1+1{//之间记录到a[i]里面                    bitCurrent=('0'+bit_Sum%2);  //1+1=2,+1=3str=bitCurrent+str;//进1,carrycarry=1;}else{bitCurrent=('0'+bit_Sum);str=bitCurrent+str;carry=0;}i--;}if (carry==1){str="1"+str;return str;}return str;}//if}};#endif
之后搜索一下答案

本质上是反序遍历两个字符串,然后依次相加,相加过程与http://blog.csdn.net/lanxu_yy/article/details/11688591类似。也可以。

http://blog.csdn.net/lanxu_yy/article/details/11691393,可以借鉴!~ 都挺繁琐的!~




0 0
原创粉丝点击