Related Articles

• Last Updated : 27 Jan, 2021

Hexadecimal Number system, often shortened to “hex”, is a number system made up from 16 symbols. it uses 10 symbols from decimal number system which are represented by 0-9 and six extra symbols A – F which represent decimal 10 – 15.

Examples:

Input: str1 = “01B”, str2 = “378”
Output: 393
Explanation:
B (11 in decimal) + 8 =19 (13 in hex), hence addition bit = 3, carry = 1
1 + 7 + 1 (carry) = 9, hence addition bit = 9, carry = 0
0 + 3 + 0 (carry) = 3, hence addition bit = 3, carry = 0
01B + 378 = 393

Input: str1 = “AD”, str2 = “1B”
Output: C8
Explanation:
D(13 in Dec) + B(11 in Dec) = 24(18 in hex), hence addition bit = 8, carry = 1
A(10 in Dec) + 1 + 1 (carry)= 12 (C in hex), addition bit = C carry = 0

Approaches:

• Using a map template to find and store the values.
• Using inbuilt functions to find the sum.

#### Method 1: Using maps

The idea is to use a map template to store the mapped values that are hexadecimal to decimal and decimal to hexadecimal.

1. Iterate until one of the given string reaches its length.
3. Perform the same operation on the remaining length of the other string (if both the strings have different lengths).
4. Return the value that has been added.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Map for converting hexadecimal``// values to decimal``map<``char``, ``int``> hex_value_of_dec(``void``)``{``    ``// Map the values to decimal values``    ``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 for converting decimal values``// to hexadecimal``map<``int``, ``char``> dec_value_of_hex(``void``)``{``    ``// Map the values to the``    ``// hexadecimal values``    ``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;``}` `// Function to add the two hexadecimal numbers``string Add_Hex(string a, string b)``{``    ``map<``char``, ``int``> m = hex_value_of_dec();``    ``map<``int``, ``char``> k = dec_value_of_hex();` `    ``// Check if length of string first is``    ``// greater than or equal to string second``    ``if` `(a.length() < b.length())``        ``swap(a, b);` `    ``// Store length of both strings``    ``int` `l1 = a.length(), l2 = b.length();` `    ``string ans = ``""``;` `    ``// Initialize carry as zero``    ``int` `carry = 0, i, j;` `    ``// Traverse till second string``    ``// get traversal completely``    ``for` `(i = l1 - 1, j = l2 - 1;``         ``j >= 0; i--, j--) {` `        ``// Decimal value of element at a[i]``        ``// Decimal value of element at b[i]``        ``int` `sum = m[a[i]] + m[b[j]] + carry;` `        ``// Hexadecimal value of sum%16``        ``// to get addition bit``        ``int` `addition_bit = k[sum % 16];` `        ``// Add addition_bit to answer``        ``ans.push_back(addition_bit);` `        ``// Update carry``        ``carry = sum / 16;``    ``}` `    ``// Traverse remaining element``    ``// of string a``    ``while` `(i >= 0) {` `        ``// Decimal value of element``        ``// at a[i]``        ``int` `sum = m[a[i]] + carry;` `        ``// Hexadecimal value of sum%16``        ``// to get addition bit``        ``int` `addition_bit = k[sum % 16];` `        ``// Add addition_bit to answer``        ``ans.push_back(addition_bit);` `        ``// Update carry``        ``carry = sum / 16;``        ``i--;``    ``}` `    ``// Check if still carry remains``    ``if` `(carry) {``        ``ans.push_back(k[carry]);``    ``}` `    ``// Reverse the final string``    ``// for desired output``    ``reverse(ans.begin(), ans.end());` `    ``// Return the answer``    ``return` `ans;``}` `// Driver Code``int` `main(``void``)``{``    ``// Initialize the hexadecimal values``    ``string str1 = ``"1B"``, str2 = ``"AD"``;` `    ``// Function call``    ``cout << Add_Hex(str1, str2) << endl;``}`
Output:
C8

Time Complexity: O(max(N, M)), where the length of the string first and second is N and M.
Auxiliary Space: O(max(N, M)), where the length of the string first and second is N and M.

#### Method 2: Using inbuilt functions

1. In python, there are inbuilt functions like hex() to convert binary numbers to hexadecimal numbers.
2. To add two hexadecimal values in python we will first convert them into decimal values then add them and then finally again convert them to a hexadecimal value.
3. To convert the numbers make use of the hex() function.
4. The hex() function is one of the built-in functions in Python3, which is used to convert an integer number into its corresponding hexadecimal form.
5.  Use the int() function to convert the number to decimal form. The int() function in Python and Python3 converts a number in the given base to decimal.

Below is the implementation of the above approach:

## Python3

 `# Program to add two hexadecimal numbers.` `# Driver code``# Declaring the variables``str1 ``=` `"1B"``str2 ``=` `"AD"` `# Calculating hexadecimal value using function``sum` `=` `hex``(``int``(str1, ``16``) ``+` `int``(str2, ``16``))` `# Printing result``print``(``sum``[``2``:])`

Output:

`C8`

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up