蓝桥杯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++每日一练之十六进制转十进制的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯C/C++每日一练之十进制转换成十六进制

蓝桥杯C/C++每日一练之闰年判断

蓝桥杯C/C++每日一练之闰年判断

蓝桥杯C/C++每日一练之字母图形

蓝桥杯C/C++每日一练之数列特征

蓝桥杯C/C++VIP试题每日一练之报时助手