蓝桥杯CC++每日一练之十六进制转十进制

蓝桥杯CC++每日一练之十六进制转十进制,第1张

蓝桥杯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 
#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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存