1. 程式人生 > >leetcode67.二進位制求和

leetcode67.二進位制求和

1.題目
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1 和 0。
2.示例
示例 1:
輸入: a = “11”, b = “1”
輸出: “100”
示例 2:
輸入: a = “1010”, b = “1011”
輸出: “10101”
3.思路
不建議轉十進位制數字求和再轉為二進位制,會超時。
二進位制求和,從右向左開始計算
4.程式碼
string addBinary(string a, string b) {
stack< bool> s;//儲存結果
int cur_a=a.size()-1;
int cur_b=b.size()-1;
int carry=0; //進位
while(cur_a>=0||cur_b>=0){
int val_a=0;
if(cur_a>=0)
val_a=a[cur_a–]-‘0’;
int val_b=0;
if(cur_b>=0)
val_b=b[cur_b–]-‘0’;
int tmp=val_a+val_b+carry;
s.push(tmp%2);
carry=tmp/2;
}
if(carry==1)
s.push(1);
string res;
while(!s.empty()){
res.push_back(booltochar(s.top()));
s.pop();
}
return res;
}
char booltochar(bool b){
if(b) return ‘1’;
else return ‘0’;
}