C语言中经典算法题目之一输入一个十进制数转换二进制有多少个1
C语言中经典算法题目之一输入一个十进制数转换二进制有多少个1
- 思路:
当我们使用%去一个一个进行循环的时候,我们不一定可以得到最好的结果,比如当我们输入一个负数时,输出结果会显示不准确,所以这里用到我们的一个规律我们使用while循环的时候,使用 n=n&(n-1),下面有具体的介绍。
#include<stdio.h>
#define count_one_jk(int n) //定义一个函数,方便我们下面的使用
{ int count=0;
while(n)
{
count++;
n=n&(n-1); //可以带几个二进制数进去自行检验
}return count;
}
int main()
{
int num;
int ret;
scanf("%d",&num);
ret = count_one_jk(num); //输入的数字再函数里面自行运算,得到我们1的个数
printf("%d",red);
return 0;
}
结果:
输入15
输出4
输入-1
输出32