利用递归将十进制转换为二进制(c primer plus中的例题)

来源:互联网 发布:sem和seo 怎么读 编辑:程序博客网 时间:2024/05/08 12:44

怎样得到5的二进制数? 因为奇数的二进制形式的最后一位一定是1,而偶数的二进制数的最后一位是0,所以可以通过计算5%2得到5的二进制形式中的最后一位数字是1或0.一般来讲,对于数值n,其二进制数的最后一位是n%2,因此计算出的第一个数字恰是需要输出的最后一位数字。这就需要使用一个递归函数实现。在函数中,首先在递归调用之前计算n%2的数值,然后再递归调用语句之后进行输出。这样,计算出的第一个数值反而在最后一个输出。


其实二进制的输出就像是十进制的差不多,我们打个比方就能更好地理解。比如说,300%10就能求出300中的最后一位数是0,然后300/10得到 30 , 30%10 = 0 ,这个0又是最低位的数字。这样子循环下去就能分别得到十进制数的各个位数。同理,在二进制中也可以用同样的方法进行每一位的求解,比如300%2 就能够得到 在二进制情况下的最后一位数,然后我们同样用300/2 = 150, 再 

150%2 得到倒数第二位二进制数的值,当然这里是0, 以此循环下去就能够得到所有的二进制位的值,书上面说用递归的方法,正好能符合这样子的要求,因为先计算的后输出符合递归的情况,思路就是这样子的,下面就是代码了,很简单,如果你看了我的话其实完全可以自己做出来,而不用先看代码,毕竟经过自己手工做的还是会记忆深刻一些。


#include <stdio.h>
#include <stdlib.h>



int digui( int b )
{
    int a ;
    a = b % 2 ;
    b = b / 2 ;
    if( b >= 1 )
    {
        digui( b ) ;
    }


    printf("%d", a ) ;
    return 0 ;
}


int main( void )
{
    int w ;
    printf("请输入1个整数:") ;
    scanf("%d", &w ) ;
    printf("二进制数为:") ;
    digui( w ) ;
    return 0 ;


}


原创粉丝点击