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

简介: 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;
}

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

相关文章
|
5月前
|
C语言
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
|
5月前
|
C语言
C语言:从键盘读入三个整数,按从大到小输出
C语言:从键盘读入三个整数,按从大到小输出
|
5月前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
5月前
|
C语言
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
|
5月前
|
C语言
【C语言刷题系列】交换整数的奇数位和偶数位
【C语言刷题系列】交换整数的奇数位和偶数位
|
5月前
|
存储 C语言
【C语言进阶篇】整数在内存的存储——原码、反码、补码
【C语言进阶篇】整数在内存的存储——原码、反码、补码
|
5月前
|
C语言
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
|
5月前
|
C语言
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
C语言-----计算两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
|
5月前
|
C语言
C语言----获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
C语言----获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
32 3