写出一个程序,输入一个十六进制的数值字符串,输出该数值的十进制字符串。
输入格式
输入包含多组测试数据。
每组数据占一行,包含一个十六进制的数值字符串。
输出格式
每组数据输出一行结果,表示给定数值的十进制字符串。
数据范围
每个输入最多包含 100 组数据。
所有答案均在 int 范围内。
输入样例:
0xA
输出样例:
10
思路
16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
例:2AF5换算成10进制:
用竖式计算:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2= 2560
第3位: 2 * 16^3 = 8192
10997
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
- #include
- #include
- #include
- #include
-
- using namespace std;
-
- string n;
-
- int get(string n, int dex)
- {
- int res = 0, k = 0;
- for (int i = n.size() - 1; i >= dex; i --)
- {
- if (n[i] >= 'A' && n[i] <= 'F') res += (n[i] - 'A' + 10) * pow(16, k ++);
- else if (n[i] >= 'a' && n[i] <= 'f') res += (n[i] - 'a' + 10) * pow(16, k ++);
- else res += (n[i] - '0') * pow(16, k ++);
- }
- return res;
- }
-
- int main()
- {
- while (cin >> n)
- {
- if (n[2] == 'x') cout << '-' << get(n, 3) << endl;
- else cout << get(n, 2) << endl;
- }
- return 0;
- }