问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
#include<stdio.h>
#include<string.h>
long long f(int n,int m)
{
long long sum=1;
int i;
for( i=0;i<n;i++)
{
sum=sum*m;
}
return sum;
}
int main ()
{
char a[10];
int b[10];
scanf("%s",a);
int n=strlen(a);
int i;
for(i=0;i<n;i++)
{
if(48<=a[i]<=57)
b[i]=a[i]-48;
if(a[i]=='A')
b[i]=10;
if(a[i]=='B')
b[i]=11;
if(a[i]=='C')
b[i]=12;
if(a[i]=='D')
b[i]=13;
if(a[i]=='E')
b[i]=14;
if(a[i]=='F')
b[i]=15;
}
long long sum=0;
int j;
for( j=0;j<n;j++)
{
sum=sum+b[j]*f(n-j-1,16);
}
printf("%I64d",sum);
return 0;
}
这个题有以下几点需要注意:
1,题目要求的数字比较大,不超过八位的十六进制。一般的int ,肯定无法满足要求,所以根据蓝桥杯的使用帮助,利用long long 以及%64Id等,来进行处理,这个是最主要注意的;
2,我采用的是讲字符型数组转化为数字数组,再进行处理,也可直接处理。这个思路上无所谓,只要可以实现。
3,求次方时,我写了一个函数,事实上C语言math这个头文件中的,pow就是这个功能,专门写,无非是想要对这个多加熟练,亲历亲为。刚开始学。一切都自己动手。