#include
#include
int main()
{
char ch;//用来接受一个输入字符
int stack[50];//存储处理后的十六进制对应的十进制
int top=0;//栈里面数据的个数
int decimal=0;//小数点在输入字符串中的位置,从0号位置开始计数
float num=0;//计算最后的十进制数
printf("请输入十六进制(0-9,a-f,A-F):");
while ((ch=getchar())!='/n')
{
if (ch>='0'&&ch<='9')
stack[top++]=int(ch-48);
else if (ch>='A'&&ch<='F')
stack[top++]=int(ch-55);
else if (ch>='a'&&ch<='f')
stack[top++]=int(ch-87);
else if (ch=='.')//如果是小数点
decimal=top;//表明从decimal个数据以后的数据都是小数部分
else {
printf("输入了非法数据");
return 0;
}
}
while(top)
{
if (decimal!=0&&top>decimal)//计算小数部分
num+=stack[--top]/pow(16,top-decimal+1);
else
num+=stack[--top]*pow(16,top);//计算整数部分
}
printf("%.4f",num);
getchar();
return 1;
}
03月17日,留作纪念!