题目描述
写一个函数,输入一个十六进制数num,输出相应的十进制数
num的取值为:[0,9],[a,f],[A,F]
解法
用数组接收十六进制,高位到低位转换
代码示例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
//写一个函数,输入一个十六进制数,输出相应的十进制数
#define MAX 100
int main(void)
{
int conver(char[]);
char num[MAX];
int c, i = 0, flag1 = 1, flag = 0;
printf("enter HEX:\n");
while ((c = getchar()) != '\0' && i < MAX && flag1)
{
if (c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F')
{
num[i++] = c;
flag = 1;
}
else if (flag)
{
num[i] = '\0';
printf("decimal number:%d\n", conver(num));
printf("continue or not?(y/n):");
c = getchar();
if (c == 'N' || c == 'n')
{
flag1 = 0;
}
else
{
i = 0;
flag = 0;
printf("\ninput a HEX number:");
}
}
}
return 0;
}
int conver(char str[])
{
int i = 0, j = 0, num = 0, sum = 0;
int len = strlen(str);
while (str[i] != '\0')
{
if (str[i] >= '0' && str[i] <= '9')
num = str[i] - '0';
else if (str[i] >= 'a' && str[i] <= 'f')
num = str[i] - 'a' + 10;
else if (str[i] >= 'A' && str[i] <= 'F')
num = str[i] - 'A' + 10;
else
break;
for (j = 0; j < len - 1; j++)
{
num = num * 16;
}
sum += num;
i++;
len--;//每读取一位就使长度-1
}
return sum;
}