AcWing 801. 二进制中1的个数(lowbit操作)
题目链接:https://www.acwing.com/problem/content/803/
解法:
核心lowbit操作:x & -x
操作的含义:
- x代表原数(不论负数正数):如101110100
- -x的计算方式是:x的所有位取反+1,即010001011 + 1 = 010001100
- x & -x即为100
总而言之,lowbit操作就是取数字x的首位1之后所有数的方法。
关于原码、反码、补码可以详见这篇博客:
https://www.acwing.com/solution/content/32726/
AC代码:
import java.util.*;
public class Main {
static int lowbit(int x) {
return x & -x;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n -- > 0) {
int x = sc.nextInt();
int cnt = 0;
while (x != 0) {
x -= lowbit(x);
cnt ++;
}
System.out.print(cnt + " ");
}
}
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步