C语言每日一题之整数求二进制1的个数

在这里插入图片描述

今天分享一道题目,用三种方法来求解
二进制1的个数

方法1
我们的十进制除10和取余数就可以得到我们每一位的数字,那我们的二进制也可

#include<stdio.h>
int num_find_1(unsigned int n)
{
    
    
	int count = 0;
	while (n)
	{
    
    
		if (1 == n % 2)
		{
    
    
			count++;
		}
		n /= 2;
	}
	return count;
}
int main()
{
    
    
	int n = 0;
	scanf("%d", &n);
	int ret = num_find_1(n);
	printf("%d", ret);
	return 0;
}

这是一种方法,另外一种就是我们可以用移位操作符来算

int num_find_1(int n)
{
    
    
	int i = 0;
	int count = 0;
	for (i = 0; i < 32; i++)
	{
    
    
		if (((n >> i) & 1) == 1)
		{
    
    
			count++;
		}
	}
	return count;
}
int main()
{
    
    
	int n = 0;
	scanf("%d", &n);
	int ret = num_find_1(n);
	printf("%d", ret);
	return 0;
}



这个方法是不是也是特别妙呢,当然还有更妙的方法,请看!!!


int num_find_1(int n)
{
    
    
	int i = 0;
	int count = 0;
	while (n)
	{
    
    
		n = n & (n - 1);
		count++;
	}
	return count;
}
int main()
{
    
    
	int n = 0;
	scanf("%d", &n);
	int ret = num_find_1(n);
	printf("%d", ret);
	return 0;
}



相信看完总会学会一种方法,今天的分享就到这里啦,不知道大家有没有注意到我的开头不一样了,嘻嘻。

猜你喜欢

转载自blog.csdn.net/2301_76895050/article/details/131987982