牛客网华为机试【求int型正整数在内存中存储时1的个数】
程序员文章站
2024-03-11 22:54:07
...
题目描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例
输入
5
输出
2
题目分析
其实就是计算一个数转换为2进制之后,其中的1的个数。
俩思路:
第一个,先将这个数转化为2进制,java中转化为二进制的方法是Integer.toBinaryString()
,然后当做一个字符串去计算,使用toCharArray
转化为一个数组,求数组中字符 1
出现的次数即可。
第二个,正儿八经的用数取运算。既然是二进制,那么
先让这个数模2,若有余数,说明有一个1,再对当前这个数进行更新,就是 num /= 2
。如此循环,直到这个数变为0(不大于0)。就可以计算出来二进制时1的个数。
java 代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(input.hasNextInt()){
int num = input.nextInt();
int count = 0;
while (num > 0){
if(num == 1){
count++;
break;
}
if(num % 2 == 1){
count++;
num /= 2;
} else {
num /=2;
}
}
System.out.println(count);
}
}
}
结果
附加:字符串解法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while(input.hasNextInt()){
int num = input.nextInt();
String binaryString = Integer.toBinaryString(num);
int count = 0;
for (int i = 0; i < binaryString.length(); i++) {
if(binaryString.charAt(i) == '1'){
count++;
}
}
System.out.println(count);
}
}
}