#include <stdio.h>
void printOc(int n) {
int rem;
if (n == 0) {
return;
}
rem = n % 8;
printOc(n / 8);
printf("%d", rem);
}
void printHex(int n) {
int rem;
if (n == 0) {
return;
}
rem = n % 16;
printHex(n / 16);
if (rem < 10) {
printf("%d", rem);
} else {
printf("%c", 'A' + rem - 10); // 用字母表示大于9的数字
}
}
int main() {
int decNumber;
printf("请输入一个十进制数: ");
scanf("%d", &decNumber);
// 手动输出八进制数
if (decNumber != 0) {
printf("该数的八进制表示为: 0");
printOc(decNumber);
printf("\n");
} else {
printf("该数的八进制表示为: 0\n");
}
// 手动输出十六进制数
if (decNumber != 0) {
printf("该数的十六进制表示为: 0x");
printHex(decNumber);
printf("\n");
} else {
printf("该数的十六进制表示为: 0\n");
}
return 0;
}
在这段代码中,我们定义了两个递归函数 printOc
和 printHex
分别用于打印八进制和十六进制数。这些函数通过递归地除以 8 或 16 来处理输入的十进制数,并在返回时打印出余数。这样,自上而下地构建了逆序的数字字符串。对于十六进制数的打印,我们还需要将大于 9 的余数转换为相应的字母(A-F)。在 main
函数中,我们检查了输入的数是否为零,如果不是,就先打印出前导 0
或 0x
,然后调用相应的打印函数。