//二进制求和/*给出两个用字符串表示的二进制数,返回他们的和(也用字符串表示)
例如:
a ="11"
b ="1"
返回"100".*/#include<string>usingnamespace std;classSolution{public://先转为十进制相加后转回二进制,会超内存longlongbinaryToDecimal(string str){int strSize = str.size();longlong dec =0, k =0;for(int i = strSize -1; i >=0; k++, i--){if(str[i]=='1'){
dec +=pow(2, k);}}return dec;}
string decimalToBinary(longlong num){if(num ==0)return"0";
string bin;int temp;while(num !=0){
temp = num %2;if(temp)
bin +="1";else
bin +="0";
num /=2;}reverse(bin.begin(), bin.end());return bin;}
string addBinary(string a, string b){longlong num1 =binaryToDecimal(a);longlong num2 =binaryToDecimal(b);longlong res = num1 + num2;
string resStr =decimalToBinary(res);return resStr;}//直接对位相加方法
string addBinary(string a, string b){int straLength = a.length();int strbLength = b.length();
string res;int i, j;bool carry =false;for(i = straLength -1, j = strbLength -1; i >=0&& j >=0;--i,--j){if(carry){if(a[i]=='1'&& b[j]=='1'){
res +="1";}elseif(a[i]=='1'&& b[j]=='0'){
res +="0";}elseif(a[i]=='0'&& b[j]=='1'){
res +="0";}else{
res +="1";
carry =false;}}else{if(a[i]=='1'&& b[j]=='1'){
res +="0";
carry =true;}elseif(a[i]=='1'&& b[j]=='0'){
res +="1";}elseif(a[i]=='0'&& b[j]=='1'){
res +="1";}else{
res +="0";}}}while(i >=0){if(carry){if(a[i]=='1'){
res +='0';}else{
res +='1';
carry =false;}--i;}else{
res += a[i];--i;}}while(j >=0){if(carry){if(b[j]=='1'){
res +='0';}else{
res +='1';
carry =false;}--j;}else{
res += b[j];--j;}}if(carry){
res +='1';}reverse(res.begin(), res.end());return res;}};
二进制求和//二进制求和/*给出两个用字符串表示的二进制数,返回他们的和(也用字符串表示) 例如: a ="11"b ="1"返回"100".*/#include<string>using namespace std;class Solution {public: //先转为十进制相加后转回二进制,会超内存 long long binaryToDecimal(string str) { int strSize = str.size(); long long de