Given two numeric Hexadecimal numbers **str1 **and str2, the task is to add the two hexadecimal numbers.

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

_AD + 1B = C8 _

Approach: 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.
  2. Start with carrying zero and add both numbers(with the carry) from the end and update carry in each addition.
  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 <bits/stdc++.h>

**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.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

#hash #mathematical #strings #base-conversion #numbers

How to add two Hexadecimal numbers
12.60 GEEK