C++程序 十六进制转十进制
给定一个十六进制数作为输入,我们需要编写一个程序,将给定的十六进制数转换为等效的十进制数。
实例:
输入: 67
输出: 103
输入: 512
输出: 1298
输入: 123
输出: 291
我们知道十六进制数使用16个符号 {0, 1, 2, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} 表示所有数字。 这里,(A, B, C, D, E, F) 表示 (10, 11, 12, 13, 14, 15)。
思路是从给定的十六进制数右侧开始提取数字,并保持一个名为 dec_value 的变量。在从十六进制数中提取数字时,将数字乘以适当的基数(16 的幂),并将其加到变量 dec_value 中。最后,变量 dec_value 将存储所需的十进制数。
例如: 如果十六进制数是 1A。
dec_value = 1*(16^1) + 10*(16^0) = 26
下图说明了如何将十六进制数 (1AB) 转换为等效的十进制值:
以下是上述思路的实现。
// C++ program to convert hexadecimal
// to decimal
#include <bits/stdc++.h>
using namespace std;
// 将十六进制转为十进制的函数
int hexadecimalToDecimal(string hexVal)
{
int len = hexVal.size();
// 初始化基数为 1,即 16^0
int base = 1;
int dec_val = 0;
// 从最后一个字符开始将字符提取为数字
for (int i = len - 1; i >= 0; i--)
{
// 如果字符在 '0' ~ '9' 范围内,则通过减去 48 的 ASCII 值将其转换为数字
if (hexVal[i] >= '0' && hexVal[i] <= '9')
{
dec_val += (int(hexVal[i]) - 48) * base;
// 基数乘以 16 的幂
base = base * 16;
}
// 如果字符在 'A'-'F' 范围内,则通过减去 55 的 ASCII 值将其转换为数字
else if (hexVal[i] >= 'A' && hexVal[i] <= 'F')
{
dec_val += (int(hexVal[i]) - 55) * base;
// 基数乘以 16 的幂
base = base * 16;
}
}
return dec_val;
}
// 主程序
int main()
{
string hexNum = "1A";
cout << (hexadecimalToDecimal(hexNum));
return 0;
}
输出:
26
使用预定义函数
// C++ program to convert octal
// to decimal
#include <bits/stdc++.h>
using namespace std;
int HexToDec(string n) { return stoi(n, 0, 16); }
// 主程序
int main()
{
string n = "1A";
cout << HexToDec(n);
return 0;
}
输出:
26