前言
在学习算法的过程中,我们会遇到如何把十进制转二进制的问题,针对如何用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。
如图:
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语言之用递归进行十进制转二进制(图解)的全部内容,感谢阅读。