//** fastest solution possible **//
#include <string_view>
#define int int_least8_t
class Solution {
public:
string addBinary(const string_view& a, const string_view& b) {
bool carry = 0;
const string_view* small;
const string_view* large;
if(a.size() > b.size()) {
small = &b;
large = &a;
}
else {
small = &a;
large = &b;
}
string ans;
ans.reserve (a.size());
int itrL = large[0].size() - 1;
for(int i = small[0].size() - 1; i >= 0; i--) {
if(small[0][i] == '1' && large[0][itrL] == '1' && carry == 1) {
ans += "1";
carry = 1;
}
else if(small[0][i] == '1' && large[0][itrL] == '1' && carry == 0) {
ans += "0";
carry = 1;
}
else if((small[0][i] == '1' && large[0][itrL] == '0' && carry == 0)
|| (small[0][i] == '0' && large[0][itrL] == '1' && carry == 0) ) {
ans += "1";
carry = 0;
}
else if(small[0][i] == '0' && large[0][itrL] == '0' && carry == 1){
ans += "1";
carry = 0;
}
else if(small[0][i] == '0' && large[0][itrL] == '0' && carry == 0){
ans += "0";
carry = 0;
}
else {
ans += "0";
carry = 1;
}
itrL--;
}
while(itrL >= 0){
if(large[0][itrL] == '1' && carry == 1){
ans+="0";
carry=1;
}
else if((large[0][itrL] == '1' && carry == 0)
|| (large[0][itrL] == '0' && carry == 1)){
ans += "1";
carry = 0;
}
else{
ans += "0";
carry = 0;
}
itrL--;
}
if(carry == 1){
ans += "1";
}
reverse(ans.begin(), ans.end());
return ans;
}
};
#undef int
#include <iostream>
#include <string>
using namespace std;
int DecToBin(int dec)
{
long long bin = 0;
int j,rem, i = 1;
for(j=dec;j!=0;j)
{
rem = j % 2;
j /= 2;
bin += rem * i;
i *= 10;
}
return bin;
}
int main()
{
string number_1, number_2;
int decimal_sum;
cout<< "Enter first number: ";
cin>> number_1;
cout<< "Enter second number: ";
cin>> number_2;
decimal_sum = stoi(number_1 , 0 ,2) + stoi(number_2 , 0 ,2);
cout<< "Binary Sum = " <<DecToBin(decimal_sum);
return 0;
}