基础练习 十六进制转十进制 时间限制:1.0s 内存限制:512.0MB
问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535
得分:75,未完全正确请大家指正
#include<iostream>
#include<string>
#include <math.h>
using namespace std;
int main()
{
string num2,num16;
int i,len,num=0;
//16进制转换成二进制(字符串)
num2=num16="";
cin>>num16;
len=num16.length();
for(i=0; i<len; i++)
{
switch(num16[i])
{
case '0':
num2+="0000";
break;
case '1':
num2+="0001";
break;
case '2':
num2+="0010";
break;
case '3':
num2+="0011";
break;
case '4':
num2+="0100";
break;
case '5':
num2+="0101";
break;
case '6':
num2+="0110";
break;
case '7':
num2+="0111";
break;
case '8':
num2+="1000";
break;
case '9':
num2+="1001";
break;
case 'A':
num2+="1010";
break;
case 'B':
num2+="1011";
break;
case 'C':
num2+="1100";
break;
case 'D':
num2+="1101";
break;
case 'E':
num2+="1110";
break;
case 'F':
num2+="1111";
break;
case 'a':
num2+="1010";
break;
case 'b':
num2+="1011";
break;
case 'c':
num2+="1100";
break;
case 'd':
num2+="1101";
break;
case 'e':
num2+="1110";
break;
case 'f':
num2+="1111";
break;
default:
break;
}
}
// cout<<num2<<endl;//输出二进制数
//二进制转换成十进制
len=num2.length();
//cout<<len<<endl;
for(i=0; i<len; i=i+1)
{
//cout<<num2[i]<<" "<<num2[i+1]<<" "<<num2[i+2]<<endl;
if(num2[i]=='1')
num=num+pow(2,len-i-1);//程序要引用math.h文件,使用时pow(x,y)表示x的y次方。
//cout<<num<<endl;
}
cout<<num<<endl;
return 0;
}