实验10-9 十进制转换二进制

本题要求实现一个函数,将正整数n转换为二进制后输出。

函数接口定义:

void dectobin( int n );

函数dectobin应在一行中打印出二进制的n。建议用递归实现。

裁判测试程序样例:

#include <stdio.h>

void dectobin( int n );

int main()
{
    int n;

    scanf("%d", &n);
    dectobin(n);

    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

10

输出样例:

1010

算法思路:《C Primer Plus》第五版 p228

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

为了得出下一个数字,需要将 原数值除以2。(相当于在十进制下把小数点左移一位)如果此时得出的数值是偶数,则下一个二进制位的数值是 0;奇数就是 1.

例如 5/2 的数值是 2,所以下一位值 是 0,这时已经得到了数值 01.重复上述计算,即使用 2除以2得出1,而 1%2的数值是1,因此下一位值是1。这时得到数值 101。

停止计算:只要被 2 除的结果 >= 2,就还需要一位二进制位进行表示,所以只有被 2 除的结果小于 2 才停止计算

 每次除以  2 就得出一位二进制位值,直到计算出最后一位为止。

5 % 2 = 1  最后一位数字 是 1

5 / 2 = 2,  2 % 2 = 0 ,倒数第二位数字是 0

2 / 2 = 1, 1 % 2 = 1,倒数第三位数字是 1

#include <stdio.h>
void to_binary(unsigned long n);

int main(){
    unsigned long number;
    scanf_s("%ul", &number);
    to_binary(number);
    return 0;
}

void to_binary(unsigned long n){
    int r;
    r = n % 2; // 计算末位数字
    if(n >= 2) // 如果被2除的结果不小于2,就继续递归
        to_binary(n/2); 
    putchar('0' + r);
    return;
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值