题目
问题描述
从键盘输入一个不超过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;
}