C语言之用递归进行十进制转二进制(图解)


前言

在学习算法的过程中,我们会遇到如何把十进制转二进制的问题,针对如何用C语言递归的方式,我有以下两种解决方法。


一、用二整除法

1.原理(图解)

用2整除十进制整数,得到一个商和余数;再用2去除商,又会得到一个商和余数,如此重复,直到商为小于1时为止,然后把先得到余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,以此排列起来。

如图:

在这里插入图片描述
即每一步取当前数除余2所得余数
且下一步取上一步数除2作为当前数
以此类推,直至当前数为0,最终倒叙输出。

2.使用图片

在这里插入图片描述

3.代码

#include <iostream>
using namespace std;
void two(int n) {
	if(n!=0) {
		two(n/2);
		printf("%d",n%2);
	}
}
int main() {
	int n;
	cin >> n;
	if(n==0) printf("0\n");
	else {
		two(n);
		printf("\n");
		}
	return 0;
}

二、对照表比较法

1.原理(图解)

从左至右依次开始:100比128小,取0;100比64大,取1,剩36;36比32大,取1,剩4;4比16小,取0;4比8小,取0;4不比4小,取1,剩0;0比2小,取0;0比1小,取0。最终得:01100100。

如图:

![在这里插入图片描述](https://img-blog.csdnimg.cn/a8265fbf730f4bb283c5c2f571cd1822.png

2.使用图片

在这里插入图片描述

3.代码

#include <iostream>
using namespace std;
void two(int n,int max) {
	if(max!=0) {
		if(n>=max) {
			printf("%d",n/max);
			two(n-max,max/2);
		} else {
			printf("0");
			two(n,max/2);
		}
	}
}
int main() {
	int n,max=1;
	cin >> n;//输入十进制数
	while(max <= n) { //max为第一个2的幂大于n的数
		max*=2;
	}
	if(n==0) printf("0\n");
	else {
	    two(n,max/2);
		printf("\n");
		}
	return 0;
}

总结

两种方法均有优点,各取所需。以上就是C语言之用递归进行十进制转二进制(图解)的全部内容,感谢阅读。
请添加图片描述

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

holic512

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

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

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

打赏作者

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

抵扣说明:

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

余额充值