java中输入一个整数,输出该数二进制表示中1的个数。例如:输入一个整数9,表示成二进制是1001,有2位是1
时间: 2023-11-27 11:52:16 浏览: 147
可以使用位运算来实现统计二进制表示中1的个数:
```java
public static int countOnes(int n) {
int count = 0;
while (n != 0) {
count++;
n &= (n - 1);
}
return count;
}
```
具体解释如下:
1. 定义一个计数器 `count`,初始值为0;
2. 循环判断 `n` 是否为0,如果不为0,则继续循环;
3. 在循环内部,每次将 `n` 与 `n-1` 进行按位与运算,并将结果重新赋值给 `n`;
4. 每次按位与运算会使得 `n` 中最右边的1变为0,因此这个循环会不断地将 `n` 中的1清除掉,直到 `n` 变为0;
5. 每次清除掉一个1时,将计数器 `count` 加1;
6. 最后返回计数器 `count` 的值,即为二进制表示中1的个数。
以上程序的时间复杂度为 O(k),其中 k 表示二进制中1的个数。因为每次循环都会清除掉 `n` 中的一个1,因此循环的次数最多为二进制中1的个数。
相关问题
java输入一个整数,输出该数二进制表示中1的个数。
可以使用位运算来统计二进制表示中1的个数,具体实现方法如下:
```java
public static int countOnes(int n) {
int count = 0;
while (n != 0) {
count++;
n &= (n - 1);
}
return count;
}
```
在这个方法中,我们使用一个循环来不断地将n的最后一个1变为0,并将计数器加1,直到n变为0为止。具体地,我们可以使用按位与运算(&)和减1来实现将最后一个1变为0的操作,因为:
- n & (n - 1) 的结果是将n的最后一个1变为0,其他位不变。
- n减1后,最后一个1变为0,低位变为1,其他位不变。
因此,我们每次将n & (n - 1) 的结果赋值给n,就相当于将n的最后一个1变为0。循环终止的条件是n变为0,说明已经统计完了所有1的个数。
使用该方法,我们可以很方便地统计一个整数的二进制表示中1的个数。
java输入一个整数,输出该数二进制表示中1的个数的全部代码
完整的代码如下:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int n = scanner.nextInt();
int count = countOnes(n);
System.out.println("该数二进制表示中1的个数为:" + count);
}
public static int countOnes(int n) {
int count = 0;
while (n != 0) {
if ((n & 1) == 1) {
count++;
}
n = n >>> 1; // 无符号右移,避免负数时死循环
}
return count;
}
}
```
这段代码首先通过 `Scanner` 类获取用户输入的整数,然后调用 `countOnes` 方法来计算二进制表示中1的个数,最后输出结果。
阅读全文