xxxxxxxxxx
#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;
}
xxxxxxxxxx
//** 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
xxxxxxxxxx
string AddBinary(string a, string b)
{
var max = a.Length<b.Length ? b.Length : a.Length;
var stack = new Stack<int>();
var remainder = 0;
for (int i = 0; i < max; i++)
{
int x = 0,y=0;
if(b.Length > i) x = (b[b.Length-i-1] =='0')?0:1;
if(a.Length > i) y = (a[a.Length-i-1] == '0')? 0:1;
if((x^y)==1) stack.Push((remainder==1)?0:1);
else
{
stack.Push(remainder);
remainder = (x & y);
}
}
if(remainder!=0) stack.Push(remainder);
return string.Concat(stack);
}