📜  如何将两个十六进制数相加?

📅  最后修改于: 2021-09-07 05:07:21             🧑  作者: Mango

给定两个数字十六进制数str1str2 ,任务是将两个十六进制数相加。

例子:

方法:

  • 使用地图模板查找和存储值。
  • 使用内置函数求和。

方法一:使用地图

这个想法是使用映射模板来存储十六进制到十进制十进制到十六进制的映射值

  1. 迭代直到给定字符串达到其长度。
  2. 从进位零开始,从末尾添加两个数字(带进位),并在每次加法时更新进位。
  3. 对另一个字符串的剩余长度执行相同的操作(如果两个字符串的长度不同)。
  4. 返回已添加的值。

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
using namespace std;
 
// Map for converting hexadecimal
// values to decimal
map hex_value_of_dec(void)
{
    // Map the values to decimal values
    map 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 dec_value_of_hex(void)
{
    // Map the values to the
    // hexadecimal values
    map 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 m = hex_value_of_dec();
    map 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;
}


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


输出:
C8

时间复杂度: O(max(N, M)),其中字符串first和second的长度分别为N和M。
辅助空间: O(max(N, M)),其中字符串first 和 second 的长度是 N 和 M。

方法 2:使用内置函数

  1. 在Python,有像hex()这样的内置函数可以将二进制数转换为十六进制数。
  2. 要在Python添加两个十六进制值,我们首先将它们转换为十进制值,然后将它们相加,最后再次将它们转换为十六进制值。
  3. 要转换数字,请使用 hex()函数。
  4. hex()函数是 Python3 中的内置函数之一,用于将整数转换为其对应的十六进制形式。
  5. 使用 int()函数将数字转换为十进制形式。 Python和 Python3 中的 int()函数将给定基数中的数字转换为十进制。

下面是上述方法的实现:

蟒蛇3

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

输出:

C8