蓝桥杯题目 十六进制转十进制

2025-03-12 08:56:33
推荐回答(1个)
回答1:

/*英文字母支持大小写输入。错误输入会自动提示用户重新输入*/
#include
#include
#include
#include  
int main() 
{  
 char a[10],i=0;
long int sum=0,k1;
char k;
s:printf ("Please enter a sixteen band:");
while (1)
{
 scanf ("%c",&k);
 if (k>48&&k<=57) a[i++]=k-48;//判断用户的输入,错误输入会报错
 else if (k==48) a[i++]=16;
 else if (k>='a'&&k<='f') a[i++]=k-87;
 else if (k>='A'&&k<='F') a[i++]=k-55;
 else if (k=='\n') {a[i++]='\0';break;}
 else {printf ("input error!\n");fflush (stdin);i=0;memset (a,'\0',10); goto s;}
 }

 k1=(int)strlen (a);//因为输入'0'时会自动转化为16(防止stlen函数停止读取),所以要把strlen结 果记录入k1
for (i=0;i{
 if (a[i]==16) a[i]=0;
sum+=a[i]*(int)pow (16,k1-i-1);//指数函数,在math.h头文件中
}
printf ("return:%ld",sum);
return 0;
}