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日

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决