✨个人主页:bit me
✨当前专栏:算法基础
专栏简介:该专栏主要更新一些基础算法题,有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下,互相监督打卡学习
给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。
输入格式:
第一行包含整数 n 。
第二行包含 n 个整数,表示整个数列。
输出格式:
共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。
数据范围:
1 ≤ n ≤ 100000 , 0 ≤ 数列中元素的值 ≤ 10 ^ 9
输入样例:
5
1 2 3 4 5
输出样例:
1 1 2 1 2
思路:
- 在这里面其实涉及到的就是原码,反码,补码还有对位运算符的一些综合运用
- 这里涉及到 lowbit(x) 的方法,就是返回 x 中(二进制)的最后一位 1,x & (~x + 1)。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
while(n -- > 0){
int x = scan.nextInt();
int count = 0 ;
while(x != 0){
//这里是用二进制进行减等于二进制
x -= lowbit(x);
count++;
}
System.out.print(count + " ");
}
}
public static int lowbit(int x){
return x & -x;//返回二进制的最后一个1
}
}
在 Java 中也有统计二进制个数封装在jdk中:
import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(new BufferedInputStream(System.in));
int n = scanner.nextInt();
for(int i = 0 ; i < n ;i++ ![请添加图片描述](https://img-blog.csdnimg.cn/5a4d4f31633f48e3a6b8f62847abea23.gif)
) {
System.out.print(Integer.bitCount(scanner.nextInt())+" ");
}
scanner.close();
}
}