Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
The calculation for binary is the same thing as natural numbers. Add bit by bit plus carry on digit.
C++ Code:
/*
* func: add_binary
* goal: add tow binary numbers in string
* @param a: binary string a
* @param b: binary string b
* return: the new sum in binary string
*/
string add_binary(string a, string b){
string result = "";
int iter_a = a.size()-1;
int iter_b = b.size()-1;
int carry_on = 0;
while(iter_a >= 0 && iter_b >= 0){
int curr_bit = (a[iter_a]-'0') ^ (b[iter_b]-'0') ^ carry_on;
if(curr_bit == 0){
//If result is 0 and two bits are 0, then we don't need to carry on
if(a[iter_a] == '0' && b[iter_b] == '0'){
carry_on = 0;
}else{
//For cases there are two 1s and one 0
carry_on = 1;
}
result = "0" + result;
}else{
//For case there are three 1s
if(a[iter_a] == '1' && b[iter_b] == '1'){
carry_on = 1;
}else{
carry_on = 0;
}
result = "1" + result;
}
--iter_a;
--iter_b;
}
//Adding remaining bits in a
while(iter_a >= 0){
int curr_bit = (a[iter_a]-'0') ^ carry_on;
if(curr_bit == 0){
if(a[iter_a] == '0'){
carry_on = 0;
}else{
carry_on = 1;
}
result = "0" + result;
}else{
carry_on = 0;
result = "1" + result;
}
--iter_a;
}
//Adding remaining bits in b
while(iter_b >= 0){
int curr_bit = (b[iter_b]-'0') ^ carry_on;
if(curr_bit == 0){
if(b[iter_b] == '0'){
carry_on = 0;
}else{
carry_on = 1;
}
result = "0" + result;
}else{
carry_on = 0;
result = "1" + result;
}
--iter_b;
}
if(carry_on){
result = "1" + result;
}
return result;
}
Python Code:
# func: add two binary numbers represented by string
# @param a: string a
# @param b: string b
# @return: sum string
def add_binary(a, b):
result = ''
carry_on = 0
iter_a = len(a)-1
iter_b = len(b)-1
while iter_a >= 0 or iter_b >= 0 or carry_on:
if iter_a >= 0:
a_val = int(a[iter_a])
iter_a -= 1
else:
a_val = 0
if iter_b >= 0:
b_val = int(b[iter_b])
iter_b -= 1
else:
b_val = 0
sum = a_val + b_val + carry_on
#If sum is bigger than 2, which means there are at least 2 '1' bits,
#then we need carry on
carry_on = sum / 2
result = str(sum % 2) + result
return result
No comments:
Post a Comment