因为十进制转化为二进制采用的是“除二取余,逆序排序法”,
所以代码如下
#include <stdio.h>
void dectobin(int n)
{
if(n==0)
printf("0");
else if(n==1)
printf("1");
else
{
dectobin(n/2);
printf("%d",n%2);
}
}
int main()
{
int n;
scanf("%d",&n);
dectobin(n);
return 0;
}
假设当我们的n输入10时
带入调用部分的代码去运行一下。
首先n!=0也不等于1,
就进入到dectobin(n/2)中
第一次:10/2=5不符合if语句中的条件,再次进入dectobin函数中运行
第二次:5/2=2再次不符合if语句中的条件,再次进入dectobin函数中运行
第三次:2/2=1,符合if语句中的条件,输出printf("1");
重点:因为函数语句体在执行完毕后,程序会自动返回函数调用处,继续执行下面的语句;
所以调用函数中首先输出printf("1");
输出printf("1");后相当于之前的dectobin(5/2)dectobin(10/2)执行完毕,程序会去自动执行dectobin(5/2)dectobin(10/2)下面的语句
所以当输出printf("1");后
程序会去输出printf("%d",2%2);//输出‘0’
然后输出printf("%d",5%2);//输出'1'
最后输出printf("%d",10%2);//输出0
所以最后在main函数中,当在调用函数中输入n=10,输出的结果就为1010了。