求一个整数存储在内存中的二进制中1的个数

    xiaoxiao2022-07-03  109

    问题描述:

    输入一个整数,求它存储在内存中的二进制中1的个数。

    问题分析:

    方法一:通过   num%2=1;   num/=2;  count++;  来实现功能。

    方法二:通过   for循环,每次右移1位,count++;

    方法三:通过   num= num&(num-1);count++;  来实现功能。

    源代码:

    #include <stdio.h> #include <stdlib.h> CountNum1(int n)//方法一 { int count = 0; while(n) { if(n%2==1) { count ++; } n/=2; } return count; } CountNum2(int n)//方法二 { int i = 0; int count = 0; for(i=0;i<32;i++) { if(((n>>i)&1) == 1) { count++; } } return count; } CountNum3(int n)//方法三 { int i = 0; int count = 0; while(n) { count++; n = n & (n-1); } return count; } int main() { int n = 0; printf("Please enter a number:"); scanf("%d",&n); int result = CountNum3(n); printf("二进制中1的个数 = %d",result); return 0; }

    小结:

    解决一个问题可以有很多种算法,只要肯动脑筋,总会想到的。

    另外一点就是要多做题,刷题,见的多了,有些东西自然很容易看到。

    最新回复(0)