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

📅  最后修改于: 2021-04-23 19:16:57             🧑  作者: Mango

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

例子:

方法:

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

方法1:使用地图

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

  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()函数将给定基数的数字转换为十进制。

下面是上述方法的实现:

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