描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示
数据范围:保证结果在 1≤n≤2^31−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例
输入:0xAA
输出:170
代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool hextoint(string hex_str, int& out_num) {
int len = hex_str.size();
vector<int> array_num;
if (hex_str[0] != '0' && hex_str[1] != 'x') {//判断输入格式以0x开头
cout << "input is not hexformat";
return false;
}
for (int i = 2; i < len; i++) {//判断输入的字符必须为0~9 A~F a~f
if (hex_str[i] < '0' ||
(hex_str[i] > '9' && hex_str[i] < 'A') ||
(hex_str[i] > 'F' && hex_str[i] < 'a') ||
hex_str[i] > 'f') {
cout << "input data is not hex";
return false;
}
}
//转换为每一个字符所代表的数字,由于输入是由低到高,而数字存储是小端(高位在前),因此需要从前往后插入
for (int i = 2; i < len; i++) {
if (hex_str[i] >= '0' && hex_str[i] <= '9') {
array_num.insert(array_num.begin(), hex_str[i] - '0');
} else if (hex_str[i] >= 'A' && hex_str[i] <= 'F') {
array_num.insert(array_num.begin(), hex_str[i] - 'A' + 10);
} else {
array_num.insert(array_num.begin(), hex_str[i] - 'a' + 10);
}
}
int j = 0;
//累加求和
for (int i = 0; i < array_num.size(); i++) {
if (i < 1 )
out_num += array_num[i];//最低为
else {
out_num += array_num[i] * (16 << j);//左移j位
j = j + 4;//每个字符占4位
}
}
return true;
}
int main() {
string a;
cin >> a;
int out_num = 0;
if (hextoint(a, out_num))
cout << out_num;
return 0;
}