¿Cómo sumar dos números hexadecimales?

Dados dos números hexadecimales numéricos str1 y str2 , la tarea es sumar los dos números hexadecimales. 

El sistema numérico hexadecimal , a menudo abreviado como «hex», es un sistema numérico compuesto por 16 símbolos. utiliza 10 símbolos del sistema numérico decimal que están representados por 0-9 y seis símbolos adicionales A – F que representan decimal 10 – 15.

Ejemplos:

Entrada: str1 = «01B», str2 = «378»
Salida: 393
Explicación:
B (11 en decimal) + 8 = 19 (13 en hexadecimal), por lo tanto, bit de suma = 3, acarreo = 1
1 + 7 + 1 (carro ) = 9, por lo tanto bit de suma = 9, acarreo = 0
0 + 3 + 0 (carry) = 3, por lo tanto bit de suma = 3, acarreo = 0
01B + 378 = 393

Entrada: str1 = “AD”, str2 = “1B”
Salida: C8
Explicación:
D(13 en diciembre) + B(11 en diciembre) = 24(18 en hexadecimal), por lo tanto, bit de suma = 8, acarreo = 1
A( 10 en Dec) + 1 + 1 (carry)= 12 (C en hexadecimal), bit adicional = C carry = 0
AD + 1B = C8  

 

Enfoques: 

  • Usar una plantilla de mapa para encontrar y almacenar los valores.
  • Usando funciones incorporadas para encontrar la suma.

Método 1: Usar mapas

La idea es usar una plantilla de mapa para almacenar los valores mapeados que son de hexadecimal a decimal y de decimal a hexadecimal.

  1. Iterar hasta que una de las strings dadas alcance su longitud.
  2. Comience llevando cero y sume ambos números (con el acarreo) desde el final y actualice el acarreo en cada adición.
  3. Realice la misma operación en la longitud restante de la otra string (si ambas strings tienen longitudes diferentes).
  4. Devuelve el valor que se ha agregado.

A continuación se muestra la implementación del enfoque anterior:

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;
}
Salida: 
C8
 

Complejidad de tiempo: O(max(N, M)), donde la longitud de la primera y segunda string es N y M.
Espacio auxiliar: O(max(N, M)), donde la longitud de la primera y segunda string es n y m

Método 2: Usar funciones incorporadas

  1. En python, hay funciones incorporadas como hex() para convertir números binarios a números hexadecimales. 
  2. Para agregar dos valores hexadecimales en python, primero los convertiremos en valores decimales, luego los agregaremos y finalmente los convertiremos nuevamente a un valor hexadecimal. 
  3. Para convertir los números, utilice la función hex(). 
  4. La función hex() es una de las funciones integradas en Python3, que se utiliza para convertir un número entero en su forma hexadecimal correspondiente.
  5.  Use la función int() para convertir el número a formato decimal. La función int() en Python y Python3 convierte un número en la base dada a decimal.

A continuación se muestra la implementación del enfoque anterior:

Ejemplo 1:

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:])

Producción:

C8

Ejemplo 2:

Python3

# Python program to add two hexadecimal numbers.
 
# Driver code
if __name__ == "__main__" :
 
    # Declaring the variables
    a = "01C"
    b = "378"
     
    # Calculating hexadecimal sum by using hex() and int()
    hexadecimal_sum = lambda a,b : hex(int(a, 16) + int(b, 16))
     
    # calling hexadecimal_sum lambda function
    print(hexadecimal_sum(a,b)[2:])
     
    # This code is contributed by AnkThon

Producción:

394

Publicación traducida automáticamente

Artículo escrito por dilipthakkarnew y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *