您的位置:首页 > 其它

lintCode(408)——二进制求和

2016-04-07 15:54 309 查看
题目描述:给定两个二进制字符串,返回他们的和(用二进制表示)。

样例

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: