蓝桥杯练习系统 基础练习:BASIC-11 十六进制转十进制

题目信息

问题描述

 从键盘输入一个不超过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:一个成长中的程序猿,感谢大家的支持。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页