蓝桥杯C/C++每日一练之十六进制转十进制
Posted 静Yu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯C/C++每日一练之十六进制转十进制相关的知识,希望对你有一定的参考价值。
第十三届蓝桥杯大赛个人赛省赛比赛将于2022年4月9日(星期六)举办,趁现在寒假的时间抓紧时间备战一下。因为博主本人报名是C/C++组,所以更新所有内容都是C/C++相关知识。题目全部都是蓝桥杯官网题库真题。今天是备战刷题的第二天。 |
从键盘输入一个不超过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 <iostream>
#include <cmath>
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;
以上是关于蓝桥杯C/C++每日一练之十六进制转十进制的主要内容,如果未能解决你的问题,请参考以下文章