题目:
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
分析:
(1)由于16进制中存在大写字母,所以需要将其先转为值的形式,即使用switch将其转成数值
(2)从字符串右侧第一个字符开始,其各个位上的数值乘以16的0,1,2,3,.......,次方,即使用pow数学公式
(3)最后将其各个位上的结果进行累加即可得到十进制
注意:
(1)16进制的数字为0~9以及A~F;
(2)转成十进制时的范围
源代码:
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
string s;
int i;
long long sum=0;
cin>>s;
int len = s.length();
for(i=len-1;i>=0;i--)
{
switch(s[i])
{
case '0':s[i] = 0;break;
case '1':s[i] = 1;break;
case '2':s[i] = 2;break;
case '3':s[i] = 3;break;
case '4':s[i] = 4;break;
case '5':s[i] = 5;break;
case '6':s[i] = 6;break;
case '7':s[i] = 7;break;
case '8':s[i] = 8;break;
case '9':s[i] = 9;break;
case 'A':s[i] = 10;break;
case 'B':s[i] = 11;break;
case 'C':s[i] = 12;break;
case 'D':s[i] = 13;break;
case 'E':s[i] = 14;break;
case 'F':s[i] = 15;break;
}
sum += s[i]*pow(16,len-i-1);
}
cout<<sum<<endl;
return 0;
}