#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
void hexadecimal(char string[100]);
char c,number[100];
printf("输入一个十六进制数,相应地输出十进制数\n\n");
int i;
flag:
label:
printf("请输入一个16进制的数(输入字符只能含有0 1 2 3 4 5 6 7 8 9 A B C D E F):");
gets(number);
for(i=0;;i++)
{
c=number[i];
if(c=='\0') break;
switch(c)
{
case '0': break;
case '1': break;
case '2': break;
case '3': break;
case '4': break;
case '5': break;
case '6': break;
case '7': break;
case '8': break;
case '9': break;
case 'A': break;
case 'B': break;
case 'C': break;
case 'D': break;
case 'E': break;
case 'F': break;
default:
{
printf("输入非法!\n");
goto label;
}
}
}
printf("\n\n");
hexadecimal(number);
printf("\n\n");
printf("continue or not?(Y/N) ");
c=getchar();
printf("\n\n\n\n");
if(c=='Y'||c=='y')
{
goto flag;
}
return 0;
}
void hexadecimal(char string[100])
{
void reverse(char s[100]);
int i,length,sum;
char c;
printf("分析:\n\t——得到的16位进制数为:");
puts(string);
length=strlen(string);
printf("\t——该数字字符长度:%d个字符\n",length);
reverse(string);
printf("\t——从最低位到最高位:");
for(i=0;i<=length;i++)
{
printf("%c ",string[i]);
}
printf("\n\n");
for(i=0,sum=0;;i++)
{
c=string[i];
if(c=='\0') break;
switch(c)
{
case '0': sum=sum+0*pow(16,i); break;
case '1': sum=sum+1*pow(16,i); break;
case '2': sum=sum+2*pow(16,i); break;
case '3': sum=sum+3*pow(16,i); break;
case '4': sum=sum+4*pow(16,i); break;
case '5': sum=sum+5*pow(16,i); break;
case '6': sum=sum+6*pow(16,i); break;
case '7': sum=sum+7*pow(16,i); break;
case '8': sum=sum+8*pow(16,i); break;
case '9': sum=sum+9*pow(16,i); break;
case 'A': sum=sum+10*pow(16,i); break;
case 'B': sum=sum+11*pow(16,i); break;
case 'C': sum=sum+12*pow(16,i); break;
case 'D': sum=sum+13*pow(16,i); break;
case 'E': sum=sum+14*pow(16,i); break;
case 'F': sum=sum+15*pow(16,i); break;
}
}
printf("转换为10进制的数字为: %d",sum);
}
void reverse(char s[100])
{
char sub[100];
int i,len;
len=strlen(s);
for(i=0;i<len;i++)
{
sub[len-1-i]=s[i];
}
sub[len]='\0';
for(i=0;i<100;i++)
{
s[i]=sub[i];
}
}