用c语言编写一个把十进制正整数分别转换为二、八、十六进制数输出的递归函数
时间: 2024-11-29 22:37:08 浏览: 27
在C语言中,可以创建一个递归函数来实现十进制到二进制、八进制和十六进制的转换。下面是一个简单的递归函数示例,用于转换十进制整数到其他基数表示:
```c
#include <stdio.h>
#include <string.h>
// 十进制转其他进制(base)的辅助函数
char* decimal_to_other(int num, int base, char result[]) {
if (num == 0) {
// 结束条件:当数字为0时,返回结果数组
return result;
}
// 递归部分:计算当前位的值并添加到结果数组
result[strlen(result)] = (num % base) + '0'; // 保持字符在0-9范围内
result = decimal_to_other(num / base, base, result);
return result;
}
void convert_decimal(int n, int radix[], int size) {
// 根据选择的基数调用相应的转换函数
switch (radix[0]) {
case 2: printf("二进制: ");
result[0] = '\0';
printf("%s\n", decimal_to_other(n, 2, result));
break;
case 8: printf("八进制: ");
result[0] = '\0';
printf("%s\n", decimal_to_other(n, 8, result));
break;
case 16: printf("十六进制: ");
result[0] = '\0';
printf("%s\n", decimal_to_other(n, 16, result));
break;
}
}
int main() {
int radix[] = {2, 8, 16}; // 进制转换选项
int size = sizeof(radix) / sizeof(radix[0]); // 获取选项数量
printf("请选择转换类型:1:十进制->二进制 2:十进制->八进制 3:十进制->十六进制 \n");
for (int i = 0; i < size; ++i) {
printf("%d: %d-%s\n", i+1, radix[i], radix[i] == 2 ? "二" : (radix[i] == 8 ? "八" : "十六")); // 显示选项及其对应的基数名称
}
scanf("%d", &n); // 输入要转换的十进制数
convert_decimal(n, radix, size); // 调用转换函数
return 0;
}
```
这个程序首先让用户选择要转换的基数,然后输入十进制数,最后通过`convert_decimal`函数递归地进行转换。
阅读全文