题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。
样例
a = 11
b = 1
返回 100
难度级别:容易
思路分析:
此题思路较为简单,认真判断进位就可以了。
需要注意的是,需要仔细判断是否存在最后一次进位,即进位的值是否都加起来了。读两个输入的字符串,是从最低位(即字符串尾)开始进行加法和进位计算的,得到的结果字符串是从字符串头部开始连接的,所以最后返回的时候,要反转字符串,这样才是正确的顺序。
实现代码如下:
class Solution {
public:
/**
* @param a a number
* @param b a number
* @return the result
*/
string addBinary(string& a, string& b) {
// Write your code here
int i=a.size()-1;
int j=b.size()-1;
string res="";
int c=0;
int sum=0;
for(;i>=0&&j>=0;i--,j--)
{
sum=(a[i]-'0')+(b[j]-'0')+c;
c=sum/2;
sum=sum%2;
res+=(sum+'0');
}
for(;i>=0;i--)
{
sum=(a[i]-'0')+c;
c=sum/2;
sum=sum%2;
res+=(sum+'0');
}
for(;j>=0;j--)
{
sum=(b[j]-'0')+c;
c=sum/2;
sum=sum%2;
res+=(sum+'0');
}
if(c!=0)
{
res+=('0'+c);
}
i=0;
j=res.size()-1;
while(i<j)
{
int temp=res[i];
res[i]=res[j];
res[j]=temp;
i++;
j--;
}
return res;
}
};