题目信息
问题描述
从键盘输入一个不超过8位
的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
解题思路
主要考察
本题给出的考察关键字是:进制转换、字符处理、判断
。字符处理主要是将字符转换为数字。通过读题我们可以发现题目规定的是输入一个不超过8位
的十六进制字符串。因为不超过8位,所以我们可以使用long long来存储计算之后的结果。long long的数据范围为:-9223372036854775808 ~ +9223372036854775807 (8 Bytes)
所以足够用来存储得到的结果,而不会出现数据溢出的问题。
解题思路
这个题目比上一个题目:蓝桥杯练习系统 基础练习:BASIC-12 十六进制转八进制简单很多,如果你已经做过肯定深有同感。我们将十六进制的字符串输入之后,先使用C++ string中的length()方法来计算一下输入的字符串长度,然后使用for循环来遍历这个字符串,使用at()函数访问第i位字符。然后判断这个字符是否是字母,如果是字母,即’A’~‘F’那么我们需要将这个字符减去’A’+10来将A-F转换为10-15,如果是’0’-‘9’,那么我们需要将这个字符减去’0’来将这个字符转换为数组0-9。我们定义一个long long sum = 0的变量来存储每一个数位相加的结果。定义一个count变量来计算第几位,即需要乘以16的几次方,每次循环都将count减去1。我描述的可能还是不太清楚,如果还是不太明白我描述的,相信你一看我的代码就明白了。
解题代码
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main(){
string Hex;
int len;
long long sum = 0;
getline(cin,Hex);
len = Hex.length();
int count = len - 1;
//将十六进制转换为十进制
for(int i=0;i<len;i++){
char ch = Hex.at(i);
if(ch >= 'A' && ch <= 'F'){
//将字母转换为数字
sum += (ch-'A'+10)*pow(16,count);
}else{
sum += (ch-'0')*pow(16,count);
}
count--;
}
cout<<sum;
return 0;
}
以上就是对于本题的解题思路了,如果你觉得我的文章对你有用请点个赞支持一下吧,如果喜欢我写的文章那么请点个关注再走呦。如果此文章有错误或者有不同的见解欢迎评论或者私信。
我是ACfun:一个成长中的程序猿,感谢大家的支持。