描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:0xAA
输出:170
#include <iostream>
#include <string>
#include <cctype>
using namespace std;int main() {std::string str{};cin >> str;if(str.empty() || str.substr(0,2) != "0x"){return 0;}std::string hex = str.substr(2, str.npos);unsigned int sum = 0;unsigned int cur = 0;for(auto h : hex){if(std::isdigit(h)){cur = h - '0'; //字符串到数字转换}else if(h >= 'A' && h <= 'F'){cur = h - 'A' + 10; //字符串到数字转换}sum *= 16;sum += cur;}std::cout << sum <<std::endl;return 0;}//十六进制转换成二进制 无符号整数
unsigned int hex2dec(std::string& str)
{if(str.empty() || str.substr(0,2) != "0x"){return 0;}std::string hex = str.substr(2, str.npos);unsigned int sum = 0;unsigned int cur = 0;for(auto h : hex){if(std::isdigit(h)){cur = h - '0';}else if(h >= 'A' && h <= 'F'){cur = h - 'A' + 10;}sum *= 16;sum += cur;}return sum;
}//二进制转换成十六进制 无符号整数
std::string dec2hex(unsigned int dec)
{std::stack<char> s{};std::string res{"0x"};while(dec){int m = dec % 16;if(m <=9){s.push(m + '0');}else {s.push(m + -10 + 'A');}dec = dec / 16; }while(!s.empty()){res.push_back(s.top());s.pop();}return res;
}/*
C++中自带的进制转换方法:
std::oct 八进制
std::dec 十进制
std::hex 十六进制std::string s{0xFF};
int a;
std::stringstream ss;
ss<<std::hex<<s;
ss>>a; C中自带的进制转换方法:
char* itoa(num, str, m) 将10进制转换成其他进制
int atoi(const char *str) 将字符串转换为整数
printf("%o") 八进制
printf("%d") 十进制
printf("%x") 十六进制
*/