进制转换
描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在
-
输入描述:
输入一个十六进制的数值字符串 -
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
十六进制转十进制:
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
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
其中F=10+5; A=10
如此即可得出这道题的答案
在编程时仅需注意三点:
- 测试集可能不止一个输入
- 循环遍历十六进制表达式字符串要避开开头的“0x”从index=2开始
- 由于输入是字符串,因此需要将ASCLL码转换为对应数值
下面给出我自己的一个代码
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
while (cin >> s) { // 注意 while 处理多个 case
int a=0;
for (int i=2; i<s.length(); i++) {
if (isdigit(s[i])) {
a = a*16+s[i]-'0';
}
else {
a = a*16+10+s[i]-'A';
}
}
cout << a <<endl;
}
}