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 = 393Entrada: 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.
- Iterar hasta que una de las strings dadas alcance su longitud.
- Comience llevando cero y sume ambos números (con el acarreo) desde el final y actualice el acarreo en cada adición.
- Realice la misma operación en la longitud restante de la otra string (si ambas strings tienen longitudes diferentes).
- 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; }
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
- En python, hay funciones incorporadas como hex() para convertir números binarios a números hexadecimales.
- 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.
- Para convertir los números, utilice la función hex().
- 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.
- 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