题目

问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入

FFFF

样例输出

65535

题解

从低位向高位遍历输入字符串的每一位,每次将累加和乘 16 与字符转换的对应数值相加,得到最终解,有点小坑的地方是,输入不超过8位,如果是 FFFFFFFF,已经超出了 int 型的范围,需要用 long long 才能存得下累加和

#include<iostream>
#include<string>
using namespace std;
int getValue(char a){
	switch(a){
		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 str;
	long long sum = 0;
	cin>>str;
	for(int i=0;i<str.length();i++)
		sum =sum*16 + getValue(str[i]);
	cout<<sum;
	return 0;
}

查看题解目录