给定两个数字十六进制数str1和str2 ,任务是将两个十六进制数相加。
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.
例子:
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
方法:
- 使用地图模板查找和存储值。
- 使用内置函数求和。
方法一:使用地图
这个想法是使用映射模板来存储十六进制到十进制和十进制到十六进制的映射值。
- 迭代直到给定字符串达到其长度。
- 从进位零开始,从末尾添加两个数字(带进位),并在每次加法时更新进位。
- 对另一个字符串的剩余长度执行相同的操作(如果两个字符串的长度不同)。
- 返回已添加的值。
下面是上述方法的实现:
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:使用内置函数
- 在Python,有像hex()这样的内置函数可以将二进制数转换为十六进制数。
- 要在Python添加两个十六进制值,我们首先将它们转换为十进制值,然后将它们相加,最后再次将它们转换为十六进制值。
- 要转换数字,请使用 hex()函数。
- hex()函数是 Python3 中的内置函数之一,用于将整数转换为其对应的十六进制形式。
- 使用 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