问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
如果将最后的结果使用整数类型保存,会出现在十六进制数较大时超出int范围的情况,故而将结果m定义为double类型,在输出时不输出小数点后内容即可
#include<cstdio>
#include<cmath>
#include<cstring>
#define maxn 10
double m=0; //十进制结果
int main(){
int t=0;
char sixteen[maxn]; //将十六进制数值以数组形式保存
gets(sixteen);
strrev(sixteen); //反转数组内元素
for(int i=0;sixteen[i]!='\0';i++){
if(sixteen[i]>='A'&&sixteen[i]<='F'){
t=sixteen[i]-'A'+10;
}
else{
t=sixteen[i]-'0';
}
m=m+t*pow(16,i);
}
printf("%.0lf",m);
}