题解 | 求int型正整数在内存中存储时1的个数

可以使用 Java 位运算 来高效计算整数 nnn 的二进制表示中 111 的个数。这是经典的 汉明重量问题(Hamming Weight),以下是解决方法及其解释。

代码解释

  1. 输入与初始化使用 Scanner 接收一个整数 nnn。初始化计数器 count = 0,用于记录二进制中 111 的个数。
  2. 核心逻辑使用 n & 1 检查 nnn 的最后一位是否为 111:如果最后一位为 111,则 n & 1 = 1,将 countcountcount 加 111。如果最后一位为 000,则 n & 1 = 0,计数器不变。使用 n >>= 1 将 nnn 右移一位,即移除已经检查过的最低位。
  3. 循环结束条件当 n==0n == 0n==0 时停止循环。此时所有位都已处理完。
  4. 输出结果输出 count,即 111 的个数。

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int count = 0;
        while (n != 0) {
            count += (n & 1); // 检查最后一位是否为 1
            n >>= 1;         // 将 n 右移一位
        }
        System.out.println(count);
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务