1、解题思路
在纸上做过十进制转二进制的朋友应该都用的都是除二取余的方法,写出每一次的余数知道0为止再从下至上依次读取余数即可,类似下图
根据观察可知十进制转换为二进制的问题属于我上一篇文章所提到的“套娃问题”且十进制转二进制(整数部分)需要从下往上读也就是可以利用递归向上传递的特点,所以用递归来解决,具体思路为
1、若当前数小于2则直接输出。
2、若当前数大于等于2,则通过对当前数(比如上图第一步的20)对2取余的得到该位所对应的数(0或1),再对其除二继续计算直到1为止。
根据递归的向上传递特点,最终得到的数字会依次从下至上输出并的到结果。
2、代码实现
#include <stdio.h>
int trans(int x);
int main()
{
int x;
scanf("%d",&x);
trans(x);
return 0;
}
int trans(int num)
{
int a;
if(num<2)
{
printf("%d",num);
}
else
{
a=num%2; //取余得到对应的数字
num=num/2;//除二进行下一步计算
trans(num);
printf("%d",a);
}
return 0;
}
至此问题就解决了,这段代码也可以解决十进制转换为二到九进制的转换,把trans函数中的2改为对应数字即可,原理一样。