C语言用递归的方式编写一个函数,实现将十六进制数转换为相应的十进制数。在主程序中实现数据的输入与输出
时间: 2024-02-19 18:02:53 浏览: 14
好的,以下是实现代码:
```c
#include <stdio.h>
int hexToDec(char *hex, int len)
{
// 递归终止条件
if (len == 0) {
return 0;
}
int dec = 0;
if (*hex >= '0' && *hex <= '9') {
dec = *hex - '0';
} else if (*hex >= 'a' && *hex <= 'f') {
dec = *hex - 'a' + 10;
} else if (*hex >= 'A' && *hex <= 'F') {
dec = *hex - 'A' + 10;
}
return dec * (1 << (4 * (len - 1))) + hexToDec(hex + 1, len - 1);
}
int main()
{
char hex[10];
printf("请输入一个十六进制数:");
scanf("%s", hex);
int dec = hexToDec(hex, strlen(hex));
printf("转换后的十进制数为:%d\n", dec);
return 0;
}
```
在上面的代码中,我们使用了递归的方式将十六进制数转换为十进制数。具体来说,我们将十六进制数的每一位上的值转换为十进制数,并乘上对应的权重。对于一个长度为 $n$ 的十六进制数,其最高位的权重为 $16^{n-1}$,每一位的权重都比它低 $16$ 倍。因此我们可以使用递归的方式,每次计算出最低位的十进制值,并将其乘上对应的权重,然后再递归的计算剩下的部分,最后将它们相加即可得到最终结果。