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