您的位置:首页 > 其它

二进制求和

2016-05-26 14:52 274 查看
给定两个二进制字符串,返回他们的和(用二进制表示)

a = 
11


b = 
1


返回 
100


#include <iostream>
#include <string>

using namespace std;

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 aLength = a.size()- 1;
int bLength = b.size()- 1;
int c=0;
int i,j,sum=0;
string result= "";

if(aLength >= bLength){

for( i = 0; i <= bLength; i++){
int digb = (b[bLength-i]-'0')%2;
int diga = (a[aLength-i]-'0')%2;
int sum = diga + digb + c;
if(sum > 1 ){
c = 1;
sum= sum % 2;
}
else{
c=0;
sum= sum % 2;
}
if(sum==0)
result = "0" + result;
else
result = "1" + result;

}
for( j = bLength+1; j<= aLength;j++){

int diga = (a[aLength-j]-'0')%2;
sum = diga + c;
if(sum > 1 ){
c = 1;
sum= sum % 2;
}
else{
c=0;
sum= sum % 2;
}
if(sum==0)
result = "0" + result;
else
result = "1" + result;
}
if(c==1)
result = "1" + result;
}
else
{
for( i = 0; i <= aLength; i++){
int digb = (b[bLength-i]-'0')%2;
int diga = (a[aLength-i]-'0')%2;
int sum = diga + digb + c;
if(sum > 1 ){
c = 1;
sum= sum % 2;
}
else{
c=0;
sum= sum % 2;
}
if(sum==0)
result = "0" + result;
else
result = "1" + result;
}
for( j = aLength+1; j<= bLength;j++){

int digb = (b[bLength-j]-'0')%2;
sum = digb + c;
if(sum > 1 ){
c = 1;
sum= sum % 2;
}
else{
c=0;
sum= sum % 2;
}
if(sum==0)
result = "0" + result;
else
result = "1" + result;
}
if(c==1)
result = "1" + result;
}
return result;
}
};

int main()
{
string s1 = "1111";
string s2 = "1111";
Solution st;
cout << st.addBinary(s1, s2);

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