HJ15 求int型正整数在内存中存储时1的个数

92 阅读1分钟

Problem: HJ15 求int型正整数在内存中存储时1的个数

题目描述

描述

输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。

数据范围:保证在 32 位整型数字范围内

输入描述:

输入一个整数(int类型)。

输出描述:

这个数转换成2进制后,输出1的个数

示例1

输入:5
输出:2

解题思路

取余

算法流程

  1. 然后,定义一个变量count,用于记录二进制表示中1的个数,初始值为0。
  2. 使用while循环,当输入的整数大于0时,执行以下操作:
    • 将num除以2的余数加到count中,即count += num % 2。
    • 将num除以2,更新num的值,即num /= 2。
  3. 循环结束后,输出count的值,即二进制表示中1的个数。

代码

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        
        int count = 0;
        while (num > 0) {
            count += num % 2;
            num /= 2;
        }
        
        System.out.println(count);
    }
}

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O(logn)O(log^n)

  • 在while循环中,每次将num除以2,直到num变为0。因此,循环的次数取决于输入整数的二进制表示中的位数,即log n。
  • 空间复杂度:

添加空间复杂度, 示例: O(1)O(1)

  • 除了输入的整数和一个计数变量count外,没有使用额外的空间。无论输入的整数大小如何,代码所使用的额外空间是固定的。