1的个数
- 代码需求:把输入数字转化成二进制,实现输出其中一的个数
代码如下:
- 解法一
public class day04 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(Integer.toString(n,2));
int count=0;
for (int i=0;i<32;i++){
if ((n&(1<<i))==(1<<i))count++;
}
System.out.println(count);
}
}
实现逻辑:假设输入12,二进制为1100
i | 1<<i | n&(1<<i) |
---|---|---|
0 | 1(2º) | 1100&0001=0 |
1 | 2(2¹) | 1100&0010=0 |
2 | 4(2²) | 1100&0100=0100=4 |
3 | 8(2³) | 1100&1000=1000=8 |
… | … | … |
- 解法二
public class day04 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(Integer.toString(n,2));
int count=0;
while (n!=0){
System.out.println(n+" "+(n-1));
n=(n-1&n);
count++;
}
System.out.println(count);
}
}
实现逻辑:假设输入12,二进制为1100
计数 | n-1 | n-1&n | count |
---|---|---|---|
1 | 1000 | 1000&1100=1000 | 1 |
2 | 0111 | 0111&1000=0000 | 2 |
跳出循环 |