问题描述:
写一个函数能够实现云输入一个整数,输出该数的二进制表示中1的个数。
解题分析:
方法一:
可以先把n与1做按位与运算,判断最低为是不是1。把1向左移动1位变成2,在与n那位与运算,这样就可以判断n的次低位是不是1,循环往复知道到n最高位判断完,1变成0,同时最为循环停止的条件。
代码如下:
import java.util.Scanner;
public class _求二进制中1的个数 {
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int N = sc.nextInt();
System.out.println(Integer.toString(N, radix(2)));
int count=0;
for(int i=0; i<32; i++){
if((N&(1<<i))==(1<<i)){
count++;
}
}
System.out.println(count);
}
private static int radix(int i) {
// TODO Auto-generated method stub
return 0;
}
}
方法二:
把一个整数减去1,在于原数字做按位与运算,会把原数二级制位中最右边的1变成0.那么一个整数二进制表示中有几个1,就可以进行几次这样的操作。
0111减去1变成0110,二者进行与运算变成0110,则把原数做右边的1变成0.循环往复直到全为0结束。
代码如下:
import java.util.Scanner;
public class _求二进制中1的个数 {
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
int N = sc.nextInt();
System.out.println(Integer.toString(N, radix(2)));
int count=0;
while(N!=0){
N =((N-1) & N);
count++;
}
System.out.println(count);
}
private static int radix(int i) {
// TODO Auto-generated method stub
return 0;
}
}
答案:这个题的答案是根据程序员输入的数而决定的,所以这个题没有确定的答案。