C语言递归函数实现十位数转换进制并打印出来(超详细)

C语言递归函数实现十位数转换进制并打印出来

思路

  取余倒排序
  将数字每次除以进制数的余数打印,但这样不是倒排序,通过将打印操作写在调用递归函数下面,可以在每次调用递归函数时将打印操作存起来。
  在达到边界后(最后一次调用)所有存起来的操作都会从最后一个开始一步步执行。
  十六进制稍微有一点点变化,多一个余数10 ~ 15表示为A ~ F的步骤,但思路一致。

事例

(片段,完整的在下面,a为十位数,n为要转换的进制):

if(a==0)
    return;
else
{
    zhuanhuan(a/n,n);
    printf("%d",a%n);
}

输入的数如果是0则停止,否则执行两步操作:
1.调用自身
2.打印余数
在执行第一步后每次调用自身里面都会再次调用自身,一直套娃直到数为0,所次每次调用自身第二步都会存起来。

如果a=4,n=2,
a不等于0,调用zhuanhuan(2,2),打印0的操作先存着。
在zhuanhuana(2,2)中a不等于0,调用zhuanhuan(1,2),打印0的操作先存着。
在zhuanhuana(1,2)中a不等于0,调用zhuanhuan(0,2),打印1的操作先存着。
在zhuanhuana(0,2)中a等于0,停止。
从最后一个开始执行存着的操作
打印1
打印0
打印0
所以4的二进制为100

代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a,n;
    scanf("%d%d",&a,&n);
    zhuanhuan(a,n);
    return 0;
}
void zhuanhuan(int a,int n)
{
    if(n==2||n==8)
        if(a==0)
            return;
        else
        {
            zhuanhuan(a/n,n);
            printf("%d",a%n);
        }
    else if(n==16)
        if(a==0)
            return;
        else
        {
            zhuanhuan(a/n,n);
            if(a%n>=10)
                printf("%c",a%n+55);
            else
                printf("%d",a%n);
        }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值