目录
一、二进制求和
模拟计算过程
class Solution {
public:
string addBinary(string a, string b) {
int len1 = a.size();
int len2 = b.size();
string ans(len1 + len2, '0');
for (int i = len1 - 1, j = len2 - 1, m = len1 + len2 - 1; i >= 0 || j >= 0; i--, j--, m--) {
int num1, num2;
if (i >= 0) num1 = a[i] - '0';
else num1 = 0;
if (j >= 0) num2 = b[j] - '0';
else num2 = 0;
int flag = ans[m] - '0' + num1 + num2;
ans[m] = flag % 2 + '0';
ans[m - 1] += flag / 2;
}
for (int i = 0; i < len1 + len2; i++)
if (ans[i] != '0') return ans.substr(i);
return "0";
}
};
二、数组形式的整数加法
模拟计算过程
这里注意的是将进位的1加到k里面去比较方便,如果放到num数组里面,若到了num[0]的位置,处理起来是比较复杂的,一开始就采用了这个,错了好几次,最后才想到把进位放到k里面,这样思路清晰,代码逻辑也没有那么复杂。
class Solution {
public:
vector<int> addToArrayForm(vector<int>& num, int k) {
vector<int> ans;
int n = num.size();
for(int i = n - 1; i >= 0; i--){
num[i] += k % 10;
if(num[i] >= 10) {
k += num[i] / 10 * 10;
num[i] %= 10;
}
k /= 10;
}
vector<int> flag;
while(k > 0){
flag.push_back(k % 10);
k /= 10;
}
for(int i = flag.size() - 1; i >= 0; i--)
ans.push_back(flag[i]);
for(int i = 0; i < n; i++)
ans.push_back(num[i]);
return ans;
}
};