题目:将一个十六进制数转换为十进制数输出。
例十六进制数: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
例如:十六进制数32be转换为十进制数n。
n=3*16^3+2*16^2+b*16^1+e*16^0
算法实现过程如下:
n=3*16
n=n*16+2
n=n*16+11
n=n*16+14
实现代码如下(C语言版):
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
/*进制转换*/
//m进制转换为十进制,m可以为任意整数,根据本题需求,m=16;s为要转换的数,因为十六进制中包含字母,所以在此应用字符数组
int htoi(char s[],int m)
{
int i = 0, n = 0;
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] >= '0'&&s[i] <= '9')
{
n = m * n + s[i] - '0';
}
if (s[i] >= 'a'&&s[i] <= 'f')
{
n = m * n + s[i] - 'a' + 10;
}
if (s[i] >= 'A'&&s[i] <= 'F')
{
n = m * n + s[i] - 'a' + 10;
}
}
return n;
}
//判断输入的数字是不是十六进制
int isH(char s[])
{
int i = 0, flag = 1;
while (s[i]!='#')
{
if (!((s[i] >= '0'&&s[i] <= '9') || (s[i] >= 'a'&&s[i] <= 'f') || (s[i] >= 'A'&&s[i] <= 'F')))
{
flag = 0;
}
i++;
}
return flag;
}
void main()
{
char c[MAX];
int i = 0;
printf("输入数字,以#结尾");
while (1)
{
c[i] = getchar();
if (c[i] == '#')
break;
i++;
}
if (isH(c))
{
printf("%d\n", htoi(c, 16));
}
system("pause");
}