-
Notifications
You must be signed in to change notification settings - Fork 1k
/
Copy pathAdd_two_binary_numbers.cpp
134 lines (126 loc) · 3.02 KB
/
Add_two_binary_numbers.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
Add two binary numbers
For given two binary numbers,
your task is to add the two binary numbers and return their sum.
*/
#include <bits/stdc++.h>
using namespace std;
//function to revers the binary numbers
//which will then be added
int reverseNumber(int num)
{
int lastBit, result = 0;
while(num > 0)
{
lastBit = num % 10;
result = result * 10 + lastBit;
num = num / 10;
}
return result;
}
//function to add the binary numbers
//there are three cases-->
//0 + 0 = 0, 0 + 1 = 1, 1 + 1 = 0 (carry=1)
int binarySum(int num1, int num2)
{
int result = 0;
int previousCarry = 0;
//only for positive numbers
while(num1 > 0 && num2 > 0)
{
if(num1 % 2 == 0 && num2 % 2 == 0)
{
result = result * 10 + previousCarry;
previousCarry = 0;//no previous carry will be generated
}
else if((num1 % 2 == 0 && num2 % 2 == 1) || (num1 % 2 == 1 && num2 % 2 == 0))
{
if(previousCarry == 1)
{
result = result * 10 + 0;
previousCarry = 1;//further carry generated
}
else
{
result = result * 10 + 1;
previousCarry = 0;//no previous carry will be generated
}
}
else
{
result = result * 10 + previousCarry;
previousCarry = 1;//carry will be generated in both the cases
}
num1 = num1 / 10;
num2 = num2 / 10;
}
while(num1 > 0)
{
if(previousCarry == 1)
{
if(num1 % 2 == 1)
{
result = result * 10 + 0;
previousCarry = 1;
}
else
{
result = result * 10 + 1;
previousCarry = 0;
}
}
else
{
result = result * 10 + (num1 % 2);
}
num1 = num1 / 10;
}
while(num2 > 0)
{
if(previousCarry == 1)
{
if(num2 % 2 == 1)
{
result = result * 10 + 0;
previousCarry = 1;
}
else
{
result = result * 10 + 1;
previousCarry = 0;
}
}
else
{
result = result * 10 + (num2 % 2);
}
num2 = num2 / 10;
}
//for any previous carry prevaling
if(previousCarry == 1)
{
result = result * 10 + 1;
}
//since we add reversed numbers the actual sum will be revese of that obtained
result = reverseNumber(result);
return result;
}
//driver code
int main()
{
int num1, num2;
cout << "Enter two binary numbers: ";
cin >> num1 >> num2;
cout << "The sum of binary numbers is :";
cout << binarySum(num1, num2);
cout << endl;
}
/*
EXAMPLE--
Input-->
Enter two binary numbers: 10101 11011
Output-->
The sum of binary numbers is : 110000
TIME COMPLEXITY --> O(N), where N is the size of binary number
SPACE COMPLEXITY --> )(1)
*/