#Leetcode# 67. Add Binary
https://leetcode.com/problems/add-binary/
iven two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1 or 0.
Example 1:
Input: a = "11", b = "1" Output: "100"
Example 2:
Input: a = "1010", b = "1011" Output: "10101"
代码1:
class Solution {
public:
string addBinary(string a, string b) {
string res;
int na = a.size();
int nb = b.size();
int n = max(na, nb);
bool carry = false;
if (na > nb) {
for (int i = 0; i < na - nb; ++i) b.insert(b.begin(), '0');
}
else if (na < nb) {
for (int i = 0; i < nb - na; ++i) a.insert(a.begin(), '0');
}
for (int i = n - 1; i >= 0; --i) {
int tmp = 0;
if (carry) tmp = (a[i] - '0') + (b[i] - '0') + 1;
else tmp = (a[i] - '0') + (b[i] - '0');
if (tmp == 0) {
res.insert(res.begin(), '0');
carry = false;
}
else if (tmp == 1) {
res.insert(res.begin(), '1');
carry = false;
}
else if (tmp == 2) {
res.insert(res.begin(), '0');
carry = true;
}
else if (tmp == 3) {
res.insert(res.begin(), '1');
carry = true;
}
}
if (carry) res.insert(res.begin(), '1');
return res;
}
};
LeetCode 的格式很难受了
代码2:
#include <bits/stdc++.h>
using namespace std;
char a[50], b[50];
char ans[1010];
int main() {
scanf("%s%s", a, b);
int lena = strlen(a), lenb = strlen(b);
for(int i = 0; i < lena / 2; i ++)
swap(a[i], a[lena - i - 1]);
for(int i = 0; i < lenb / 2; i ++)
swap(b[i], b[lenb - i - 1]);
int len = min(lena, lenb), maxlen = max(lena, lenb);
int cnt = 0;
int k = 0;
for(int i = 0; i < len; i ++) {
ans[cnt ++] = (a[i] - '0' + b[i] - '0' + k) % 2 + '0';
k = (a[i] - '0' + b[i] - '0' + k) / 2;
}
for(int i = len; i < maxlen; i ++) {
if(maxlen == lena) {
ans[cnt ++] = (a[i] - '0' + k) % 2 + '0';
k = (a[i] - '0' + k) / 2;
} else {
ans[cnt ++] = (b[i] - '0' + k) % 2 + '0';
k = (b[i] - '0' + k) / 2;
}
}
if(k) ans[cnt ++] = '1';
for(int i = 0; i < cnt / 2; i ++)
swap(ans[i], ans[cnt - i - 1]);
printf("%s\n", ans);
return 0;
}

浙公网安备 33010602011771号