C++程序:添加两个二进制字符串,并以二进制字符串形式返回
假设我们有两个二进制字符串a和b,我们需要将这两个二进制数相加并找到它们的和,也以字符串的形式表示。
因此,如果输入类似于a = "10110",b = "10010",则输出将为"101000"。
为了解决这个问题,我们将遵循以下步骤:
- ret := 空字符串
- na := a的长度,nb := b的长度
- i := na - 1,j := nb - 1
- carry := 0
- 当 (i >= 0 或 j >= 0) 时,执行以下操作:
- addA := (如果 i >= 0,则为 a[i] - '0' 的ASCII码,否则为 0)
- addB := (如果 j >= 0,则为 b[j] - '0' 的ASCII码,否则为 0)
- sum := addA + addB + carry
- carry := sum / 2
- sum := sum % 2
- ret := ret 连接 sum
- i -= 1
- j -= 1
- 如果 carry 不为零,则
- ret := ret 连接 carry
- 反转数组 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
广告