题目分析:
当看到要求十六进制转换成十进制时,先要了解十六进制的组成:1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(由此看来存十六进制数要用到字符数组来存);分别对应1,2,3,4,5,6,7,8,9,10,11,12,13,14,15且十六进制是逢16进1。通过ASCII码表得知A的ASCII码值是65,而数字字符通过减掉字符0(‘0’),即可得到其本身对应的数。
代码实现
#include<stdio.h>
#include<string.h>
//该函数实现进制转换
void changeover(unsigned long long *p,int b,int a[]);
int main()
{
char arr[101];//用来输入十六进制数
int a[101];//存字符转化成的数字
unsigned long long add=0;//十进制数
gets(arr);//输入十六进制数
int b=strlen(arr);//得出输入字符长度方便下面计算
for(int i=0;i<b;i++)//十六进制字符转换成对应数字
{
if(arr[i]>='A'&&arr[i]<='F')
a[i]=arr[i]-55;//A的ASCII码值为65,减掉55即为对应数字
else
//数字字符通过减掉字符0('0'),即可得到其本身对应的数
a[i]=arr[i]-'0';
}
changeover(&add,b,a);//该函数实现进制转换
printf("%llu\n",add);
return 0;
}
//该函数实现进制转换
void changeover(unsigned long long *p,int b,int a[])
{
unsigned long long q=1;
for(int i=b-1;i>=0;i--)//从最后一位开始进行计算
{
*p+=a[i]*q;
q*=16;//每向右移动一位需要倍乘16
}
}