Problem: HJ15 求int型正整数在内存中存储时1的个数
题目描述
描述
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
数据范围:保证在 32 位整型数字范围内
输入描述:
输入一个整数(int类型)。
输出描述:
这个数转换成2进制后,输出1的个数
示例1
输入:
5
输出:2
解题思路
取余
算法流程
- 然后,定义一个变量count,用于记录二进制表示中1的个数,初始值为0。
- 使用while循环,当输入的整数大于0时,执行以下操作:
- 将num除以2的余数加到count中,即count += num % 2。
- 将num除以2,更新num的值,即num /= 2。
- 循环结束后,输出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);
}
}
复杂度
- 时间复杂度:
添加时间复杂度, 示例:
- 在while循环中,每次将num除以2,直到num变为0。因此,循环的次数取决于输入整数的二进制表示中的位数,即log n。
- 空间复杂度:
添加空间复杂度, 示例:
- 除了输入的整数和一个计数变量count外,没有使用额外的空间。无论输入的整数大小如何,代码所使用的额外空间是固定的。