C语言,编写把十进制正整数转换成S进制(S=2,8,16)数输出的递归函数,在main函数中调用这个函数并输出结果,不能用数组
时间: 2024-12-22 07:13:36 浏览: 1
在C语言中,我们可以编写一个递归函数来将十进制数转换成任意进制(这里仅示例2进制、8进制和16进制)。下面是一个简单的实现:
```c
#include <stdio.h>
#include <string.h>
// 十进制转S进制的递归函数
void decimalToBase(int n, int base, char* result, int pos) {
if (n == 0) {
// 如果n为0,说明已经转换完一位,添加'\0'结束字符串
result[pos] = '\0';
} else {
// 获取当前位的数字
int digit = n % base;
// 将剩余部分继续转换,并添加当前位到结果
result[pos] = '0' + digit; // 对于base 2-16,加法范围不会超过字符'9'
decimalToBase(n / base, base, result, pos + 1);
}
}
int main() {
int decimalNum = 1234; // 需要转换的十进制数
int bases[] = {2, 8, 16}; // 转换的目标进制
for (int i = 0; i < sizeof(bases) / sizeof(bases[0]); i++) {
char result[32]; // 存储转换后的结果,足够容纳任意大小的base
memset(result, 0, sizeof(result)); // 初始化为0
decimalToBase(decimalNum, bases[i], result, 0); // 调用函数
printf("Decimal %d in base %d is: %s\n", decimalNum, bases[i], result);
}
return 0;
}
```
在这个程序中,`decimalToBase`函数会递归地处理每一位,直到十进制数变成0。然后,它会把余数(对应S进制的某一位)追加到结果字符串中。
阅读全文