从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入:
FFFF
样例输出:
65535
解题思路:
编写程序之前我们需要先知道十六进制和十进制之间是如何转化的,了解了数学思想才能编写出程序。
1、 首先明白16进制数(从右到左数是第0位,第1位,第2位……)的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方,依次这样排列下去。一定要记清楚是从右到左。
2、 明白ABCDEF表示的二进制数字分别是10,11,12,13,14,15。
3、 十六进制转换成十进制的公式是:要从右到左用二进制的每个数去乘以16的相应次方,然后这些数字相加就是对应的十进制了。
第一天的练习题目是将十六进制转换为八进制,今天是十六进制转换为十进制。十六进制转换为十进制就不需要先转换为二进制了,可以直接转换为十进制。
输入的十六进制还是按照字符串处理,先将每一位转换成十进制,A、B、C、D、E、F、分别对应的就是十进制的10、11、12、13、14、15、16.然后每一位的权值计算出最终的十进制数。
完整代码:
#include#include using namespace std; int toNum(char str) { switch (str) { case '0' : return 0; case '1' : return 1; case '2' : return 2; case '3' : return 3; case '4' : return 4; case '5' : return 5; case '6' : return 6; case '7' : return 7; case '8' : return 8; case '9' : return 9; case 'A' : return 10; case 'B' : return 11; case 'C' : return 12; case 'D' : return 13; case 'E' : return 14; case 'F' : return 15; } } int main() { string num; cin >> num; int ans = 0; for (int i = 0; i < int(num.size()); ++i) { ans += toNum(num[i]) * pow(16, num.size() - 1 - i); } cout << ans << endl; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)