题目描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 :1-2的31次方减一
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
输入例子1:
0xAA
输出例子1:
170
代码
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char a[1000];
int n;
while(scanf("%s",a)!=EOF)//用字符数组来存储这个十六进制
{
int i,sum=0;
n=strlen(a);
for(i=n-1;i>=2;i--)//从右往左来求16进制
{
if(a[i]=='A')
{
sum+=10*pow(16,n-1-i);
}
else if(a[i]=='B')
{
sum+=11*pow(16,n-1-i);
}
else if(a[i]=='C')
{
sum+=12*pow(16,n-1-i);
}
else if(a[i]=='D')
{
sum+=13*pow(16,n-1-i);
}
else if(a[i]=='E')
{
sum+=14*pow(16,n-1-i);
}
else if(a[i]=='F')
{
sum+=15*pow(16,n-1-i);
}
else
{
sum+=(a[i]-'0')*pow(16,n-1-i);//减去字符0的ascii码值,正好是当前数值。
}
}
printf("%d\n",sum);
}
return 0;