m0_73080662 2022-11-24 17:39 采纳率: 83.3%
浏览 11
已结题

6-12 实验6_5_二进制的位数

设计递归函数int countBinary(int n); 用于将非负十进制整数n转换成二进制形式,并返回该二进制数的位数。如十进制数13的二进制形式为1101,位数为4,那么调用countBinary(13)的结果为4。

要求同学们先写出该问题的递归定义式,再设计递归函数。

输入与输出要求:
输入一个非负整数n。输出求得的结果,如输入“13”,输出“4”,占一行。

注意:此题要求递归求解,且不允许使用全局变量,其他方式不得分。

函数接口定义:
int countBinary(int n);
其中 n 是用户传入的参数。 n 的值不超过int的范围。函数的返回值为 n的二进制形式的位数。

裁判测试程序样例:
#include<stdio.h>

int countBinary(int);

int main()
{
int n;

scanf("%d",&n);
printf("%d\n",countBinary(n));

return 0 ;

}

/* 请在这里填写答案 */
输入样例:
13
输出样例:
4

用代码块功能插入代码,请勿粘贴截图
int countBinary(int n)
{ int shu=0;
    if(n==0||n==1) return 1;
 else
 {
     shu=n%2+countBinary(n/2)*10;
 }
    
  int i =0;  
while(shu!=0)
{ i++;
 shu=shu/10;
    
}
    
  return i;  
    
    
    
    
}



shu是用来表示那个2进制的数字,我发现我求的对应二进制的数字是正确的,但是,不管怎么样,位数算出来都是2

我把循环去掉以后,改为返回shu/10,确定是除而不是取余,原本的一个二进制数1101/10后会算出1,可是这个1101应该本质上在这个程序里其实是十进制数值啊。

请帮忙找下问题,非常感谢
  • 写回答

6条回答 默认 最新

  • CSDN专家-link 2022-11-24 17:47
    关注

    这是只需要返回位数的意思么?那你的代码有点多此一举,完全没有必要去计算转换出来的二进制值啊,只需要统计递归了多少次就是多少位了啊

    #include <stdio.h>
    int countBinary(int n)
    {
        if(n==0 || n==1)
            return 1;
        return 1 + countBinary(n/2);
    }
    
    int main()
    {
        int a;
        scanf("%d",&a);
        printf("%d\n",countBinary(a));
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 创建了问题 11月24日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图