题目
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
这是我想的办法(有点慢时间复杂度高):
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
int num = Integer.valueOf(str);
String binary = Integer.toBinaryString(num);
int count = 0;
for(int i = 0; i<binary.length(); i++){
if(binary.charAt(i) == '1'){
count++;
}
}
System.out.println(count);
}
}
这种方法是利用java提供的类函数,直接把数变为二进制表示再数个数。
还有一种方法是师兄想的,我写的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
int num = Integer.valueOf(str);
int count = 0;
while(num != 0){
if((num & 1) == 1){
count++;
}
num = num>>1;
}
System.out.println(count);
}
}
这种方法是利用在电脑里面存储的数本来就是二进制的,然后移位,与1相与,结果是1就是1,结果不是1就是0,这种方法快一些。