当前位置: 首页 > news >正文

(C语言)整数转二进制后1和0的个数(递归)(指针)

#include <stdio.h>
//定义递归函数,使用指针定义全局变量x,y,用来表示1和0的个数
void fun(int num,int *x,int *y){
    if(num>1){
        fun(num/2,x,y);
    }
    printf("%d",num%2);
    if(num%2==1){
        (*x)++;
    }else if(num%2==0){
        (*y)++;
    }
}
int main(){
    int x=0,y=0;
    printf("请输入一个整数\n");
    int num=0;
    if(scanf("%d",&num)!=1){
        printf("输入无效!\n");
        return 1;
    }
    printf("二进制表示:");
    fun(num,&x,&y);
    printf("\n");
    printf("一共有%d个1,%d个0",x,y);
    return 0;
}

首先,我们要知道整数是怎么转二进制的:

(C语言)递归求整数的二进制(递归求法)(C语言教学)-CSDN博客

(C语言)将整数转化为二进制(转化二进制教学)-CSDN博客

第一个是递归法,第二个是普通解法(不建议) ,简单介绍一下递归法(第一个链接更详细,可以去看看),确立递归终止条件:num<=1时终止,随后让num>1的数不断的除于2,然后求余,即可得到二进制

关键在于如何使用指针定义全局变量,在指针教学中提到,指针的作用之一就是定义全局变量:

(C语言)指针与指针数组的使用教学(C语言基础教学)(指针教学)-CSDN博客

因次定义x,y来分别表示1和0的个数

代码运行结果如下 :

请输入一个整数
10
二进制表示:1010
一共有2个1,2个0
请按任意键继续. . .

注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!!

相关文章:

  • 反射型(CTFHUB)
  • JavaScript实现一个函数,将数组扁平化(flatten),即把多维数组转为一维数组。
  • LiteratureReading:[2023] GPT-4: Technical Report
  • xLua_003 Lua访问C#
  • 正确理解虚基类
  • Umi-OCR 实践教程:离线、免费、高效的图像文字识别工具
  • 基于STC89C52的DS1621温度检测系统
  • 【python3】:轻松实现点阵数据 转DXF格式
  • ROS2 常用命令详解
  • 第37周:文献阅读
  • java查询es超过10000条数据
  • 内容中台实施效能跃迁方法论
  • Python实现ONNXRuntime推理YOLOv11模型
  • AI 如何重塑数据湖的未来
  • git原理与常用命令及其使用
  • 数学建模:MATLAB卷积神经网络
  • 【嵌入式学习】触发器 - ADC - DAC
  • 微信 MMTLS 协议详解(五):加密实现
  • 【嵌入式硬件测试之道连载之第三章:核心处理器的选型与应用】
  • IS-IS原理与配置
  • 家庭相册㉙在沪打拼25年,我理解了父母清晨去卖蜜饯的辛苦
  • 网民反映“潜水时遭遇服务质量不佳”,三亚开展核查调查
  • 金融监管总局将出八大增量政策,李云泽详解稳楼市稳股市“组合拳”
  • 央行、证监会:科技创新债券含公司债券、企业债券、非金融企业债务融资工具等
  • 央行行长:未来还可以扩大结构性货币政策工具规模或创设新的政策工具
  • 印度导弹凌晨打击巴基斯坦多座设施,巴总理:正对战争行为作有力回应