问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。样例输入
FFFF
样例输出
65535
注意事项:
若十六进制数为八位,权重的计算值会超出int的量程,使结果存在负数。如输入数据位为FFFFFFFF
#include<iostream>
#include<string>
using namespace std;
int main(){
string hex;
long long int Dec=0;
long long int d; //注意权值可能会超量程
do{
cin>>hex;
}while(hex.size()>8);
int j;
//16进制->10进制
for(int i=0;i<hex.size();i++)
{
//十六进制转化为数字
switch(hex[i])
{
case '0': d=0;break;
case '1': d=1;break;
case '2': d=2;break;
case '3': d=3;break;
case '4': d=4;break;
case '5': d=5;break;
case '6': d=6;break;
case '7': d=7;break;
case '8': d=8;break;
case '9': d=9;break;
case 'A': d=10;break;
case 'B': d=11;break;
case 'C': d=12;break;
case 'D': d=13;break;
case 'E': d=14;break;
case 'F': d=15;break;
default: break;
}
//计算权值
int a=1;
int j=i;
while(hex.size()-j-1)
{
a=a*16;
j++;
}
Dec+=d*a;
}
//测试输出
cout<<Dec;
return 0;
}