#include <bits/stdc++.h>
using
namespace
std;
map<
char
,
int
> hex_value_of_dec(
void
)
{
map<
char
,
int
> m{ {
'0'
, 0 }, {
'1'
, 1 },
{
'2'
, 2 }, {
'3'
, 3 },
{
'4'
, 4 }, {
'5'
, 5 },
{
'6'
, 6 }, {
'7'
, 7 },
{
'8'
, 8 }, {
'9'
, 9 },
{
'A'
, 10 }, {
'B'
, 11 },
{
'C'
, 12 }, {
'D'
, 13 },
{
'E'
, 14 }, {
'F'
, 15 } };
return
m;
}
map<
int
,
char
> dec_value_of_hex(
void
)
{
map<
int
,
char
> m{ { 0,
'0'
}, { 1,
'1'
},
{ 2,
'2'
}, { 3,
'3'
},
{ 4,
'4'
}, { 5,
'5'
},
{ 6,
'6'
}, { 7,
'7'
},
{ 8,
'8'
}, { 9,
'9'
},
{ 10,
'A'
}, { 11,
'B'
},
{ 12,
'C'
}, { 13,
'D'
},
{ 14,
'E'
}, { 15,
'F'
} };
return
m;
}
string Add_Hex(string a, string b)
{
map<
char
,
int
> m = hex_value_of_dec();
map<
int
,
char
> k = dec_value_of_hex();
if
(a.length() < b.length())
swap(a, b);
int
l1 = a.length(), l2 = b.length();
string ans =
""
;
int
carry = 0, i, j;
for
(i = l1 - 1, j = l2 - 1;
j >= 0; i--, j--) {
int
sum = m[a[i]] + m[b[j]] + carry;
int
addition_bit = k[sum % 16];
ans.push_back(addition_bit);
carry = sum / 16;
}
while
(i >= 0) {
int
sum = m[a[i]] + carry;
int
addition_bit = k[sum % 16];
ans.push_back(addition_bit);
carry = sum / 16;
i--;
}
if
(carry) {
ans.push_back(k[carry]);
}
reverse(ans.begin(), ans.end());
return
ans;
}
int
main(
void
)
{
string str1 =
"1B"
, str2 =
"AD"
;
cout << Add_Hex(str1, str2) << endl;
}