C语言递归法实现进制转换 十进制到八进制和十六进制

#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;
}

在这段代码中,我们定义了两个递归函数 printOcprintHex 分别用于打印八进制和十六进制数。这些函数通过递归地除以 8 或 16 来处理输入的十进制数,并在返回时打印出余数。这样,自上而下地构建了逆序的数字字符串。对于十六进制数的打印,我们还需要将大于 9 的余数转换为相应的字母(A-F)。在 main 函数中,我们检查了输入的数是否为零,如果不是,就先打印出前导 00x,然后调用相应的打印函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琪琪的小白先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值