前言
经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。
描述
输入一个正整数,计算它在二进制下的1的个数。
注意多组输入输出!!!!!!
数据范围: 1≤𝑛≤231−1 1≤n≤231−1
输入描述:
输入一个整数
输出描述:
计算整数二进制中1的个数
示例1
输入:
5
输出:
2
说明:
5的二进制表示是101,有2个1
实现原理与步骤
最简单的可以通过Java自带API实现
实现代码(API)
java
public class CountBits {
public static void main(String[] args) {
int number = 29; // Example number
int count = Integer.bitCount(number);
System.out.println("Number of 1s in binary representation of " + number + " is: " + count);
}
}
实现代码(逐位检查)
java
public class CountBits {
public static void main(String[] args) {
int number = 29; // Example number
int count = countBits(number);
System.out.println("Number of 1s in binary representation of " + number + " is: " + count);
}
public static int countBits(int number) {
int count = 0;
while (number != 0) {
count += number & 1; // Check the least significant bit
number >>= 1; // Right shift by 1
}
return count;
}
}
实现代码(位清零算法)
java
public class CountBits {
public static void main(String[] args) {
int number = 29; // Example number
int count = countBits(number);
System.out.println("Number of 1s in binary representation of " + number + " is: " + count);
}
public static int countBits(int number) {
int count = 0;
while (number != 0) {
number &= (number - 1); // Clear the least significant bit set
count++;
}
return count;
}
}
实现代码(递归算法)
java
public class CountBits {
public static void main(String[] args) {
int number = 29; // Example number
int count = countBits(number);
System.out.println("Number of 1s in binary representation of " + number + " is: " + count);
}
public static int countBits(int number) {
if (number == 0) {
return 0;
} else {
return (number & 1) + countBits(number >> 1);
}
}
}