假设我们有两个二进制字符串a和b,我们必须将这些二进制数字相加并找到它们的总和,也作为字符串。
因此,如果输入类似于a =“ 10110”,b =“ 10010”,则输出将为“ 101000”。
为了解决这个问题,我们将遵循以下步骤-
ret:=空字符串
na:= a的大小,nb:= b的大小
i:= na-1,j:= nb-1
进位:= 0
而(i> = 0或j> = 0),请执行以下操作:
addA:=(如果i> = 0,则a [i]-ASCII为“ 0”,否则为0)
addB:=(如果j> = 0,则b [j]-ASCII为“ 0”,否则为0)
sum:= addA + addB +进位
进位:= sum / 2
sum:=总和2
ret:= ret并置总和
(将i减1)
(将j减1)
如果进位不为零,则:
ret:= ret串联进位
反转数组ret
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: string solve(string a, string b){ string ret = ""; int na = a.size(); int nb = b.size(); int i = na - 1; int j = nb - 1; int carry = 0; while(i >= 0 || j >= 0){ int addA = i >= 0 ? a[i] - '0' : 0; int addB = j >= 0 ? b[j] - '0' : 0; int sum = addA + addB + carry; carry = sum / 2; sum %= 2; ret += to_string(sum); i--; j--; } if(carry) ret += to_string(carry); reverse(ret.begin(), ret.end()); return ret; } }; main(){ string a = "10110", b = "10010"; Solution ob; cout << ob.solve(a, b); }
"10110","10010"
输出结果
101000