天天看点

蓝桥杯 BASIC-11 十六进制转十进制

问题描述

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入

FFFF

样例输出

65535

题意:给定一个十六进制的数,转化成十进制的数输出。

思路:用求得的已知数*16+每位上的值,是求十进制一种简单方法。不用从尾部开始求起。

注意:这里的数超过int,所有最后的十进制数要用long long int存储,long也会错误。

代码:

#include <iostream>
#include<string>
using namespace std; 
int main(int argc, char** argv) {
	string s;
	long long int num = 0;//注意不能用int或者long存储,否则会错误。用long long int保存数值 
	cin>>s;
	for(int i=0;i<s.size();i++){//已求的前面的数num*16+每位对应的数字,全部加起来即是十进制的数,不用从尾部开始 
		if(s[i]>='0'&&s[i]<='9'){//要判断每位数是0-9还是A-F,转化位对应的数 
			num = num*16+(s[i]-'0');
		}else if(s[i]>='A'&&s[i]<='F'){
			num = num*16+(s[i]-'A'+10);
		}
	} 
	cout<<num<<endl;
	return 0;
}
           

继续阅读