(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语言教学)-优快云博客

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

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

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

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

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

代码运行结果如下 :

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值