首页 > 试题广场 >

二进制1的位数

[编程题]二进制1的位数
  • 热度指数:157 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
求出一个正整数转换成二进制后的数字“1”的个数。
例:数字23转为二进制为 10111,其中1的个数为4
示例1

输入

23

输出

4
public static int binaryTo(int num) { int sum = 0;  while (num > 0) {
        sum += num % 2;
        num = num / 2;
    } return sum;
}

发表于 2021-02-28 23:39:50 回复(0)
int trueBitCount(int a ) {
    // write code here

	int count = 0;
	if (a >= 0)
	{
		while (a)
		{
			if (a & 1) {//可以判断出当前a最后一位是1还是0
				count++;
			}
			a = a >> 1;
		}
	}
	else
	{
		//负数右移,我这个编译器是算术右移(大多数编译器都是算术右移)
		//算术右移就是,最右边数丢弃,左边补符号位,因为是负数也就是补1
		//这里如果还用while(a)就会一直死循环下去,因为左边会一直补1
		//但我们是知道整形是32位存储在内存里面的,我们循环32次即可
		for (int i = 0;i < 32;i++)
		{
			if (a & 1) {//可以判断出当前a最后一位是1还是0
				count++;
			}
			a = a >> 1;
		}
	}
    return count;
}
c语言解法
发表于 2022-07-27 19:36:35 回复(0)
#include<stdio.h>
    int count_bit_one(int n)
{
    int count = 0;
    while(n)
    {
        n = n&(n-1);
        count++;
    }
    return count;
}
int main()
{
    int a = 0;
    scanf("%d\n",&a);
    int count = count_bit_one_(a);
    printf("%d\n",count);
    return 0;
}
发表于 2022-03-29 15:32:27 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = bf.readLine()) != null) {
            int temp = Integer.parseInt(str);
            String s = Integer.toBinaryString(temp);
            char[] chars = s.toCharArray();
            int count = 0;
            for (char aChar : chars) {
                if (aChar == '1') {
                    count++;
                }
            }
            System.out.println(count);
        }
    }
}

发表于 2021-02-05 10:06:19 回复(0)