递归法将十进制数字转换为其他进制数字

递归法将十进制数字转换为其他进制数字

导入

一.十进制转换为二进制数字为例子

十进制二进制
11
210
31%1
101010

二.以十进制位获得每一位数字为例子

1 -----> 1%10=1
11 -----> 11%10=1 + (11/10 )%10=1
123-----> 123%10=3 + ( 123/10)%10=2 + (123/10/10)%10=1

<注>:此时我们不难发现我们这样得到的数字是从低位数字到高位数字(一会将会用到此内容)

分析

xxxx我们首先需要将转换的每个进制位的数字计算出来,而计算的方式就是不断地模上该进制数字,获得最低位数字,再将原数字除上进制数字,获得较高位数字,直到原数字变成0结束,然后将数字从高位到低位挨个输出即可获得转换后的进制数字.
xxxx但是这里会出现一个问题,就是我们是从低位开始获得数字,而输出的时候要求从高位输出。
xxxx对于这个问题,我们很容易想到可以先把所有数字用数组储存起来,最后再反向输出,即可完成任务,这种方式我在这里就先不阐述,我在面对这个问题的时候,觉得应该可以用递归的方式解决这个问题。因为我们知道递归就是函数调用自己的一个过程,而在不断调用,函数递归深度不断加大直到递归结束的时候,我们首先得到的数字就是最后一次函数调用得到的数字(即是最高位数字)

举例说明:
将十进制的5 转换为二进制数字:
(第一步)5%2=1 (这个1就是二进制数字中第一位数字) 然后5/2=2(此时我们再把2作为一个数字求他的二进制位)
(第二步) 2%2=0 (0是二进制数字中第二位数字) 然后2/2=1(此时我们再把1作为一个数字求它的二进制位)
(第三步)1%2=1 (这个1就是它的第三位数字) 然后1/2=0(结束)

代码实现

下面我们进行代码的具体实现:

int main()
{
	int num = 0;  //用于存放一个数字
	int scale = 0;  //用于存放你选择的进制
	printf("请输入一个十进制数字:>");
	scanf("%d", &num);
	printf("请输入你将转换的进制:>");
	scanf("%d", &scale);
	fun(num, scale);
	printf("\n");
	return 0;
}
void fun(int num, int scale)
{
	if (num/scale)  //如果num>=scale 说明在该进制下的数字
		fun(num / scale, scale);
	printf("%d", num%scale);
}

效果展示
在这里插入图片描述
在这里插入图片描述

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值