/**
* Created by abdul on 10/31/2016.
*/
import java.util.Arrays;
import java.util.Scanner;
public class BitCount {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Enter Cases:");
int cases = in.nextInt();
for (int i = 0; i < cases; i++) {
int a = in.nextInt();
String binary = Integer.toBinaryString(a);
String[] nums = {binary};
int count = 0;
for (int j = 0; j < nums.length; j++) {
//System.out.println(Arrays.toString(nums));
if (nums[j].equals("1"))
count++;
}
System.out.println(count);
}
}
Code Abbey Called Bit Count是一个问题 您可能知道,计算机内的所有值都以二进制系统表示。在这个简单的任务中,您要编写一个程序来计算给定值中的非零位数。
我们使用32位整数值,因此应该有0到32个非零位。 http://www.codeabbey.com/index/task_view/bit-count 你能不能帮我理解为什么我的循环只增加一次而不是递增整个事物?
答案 0 :(得分:2)
你这样做:
int a = in.nextInt();
String binary = Integer.toBinaryString(a);
String[] nums = {binary};
让我们假设你输入“4”。会发生什么?
a
中。 binary
中。 binary
。 你要做的是创建一个字符串的每个数字的数组,但实际上你创建了一个单独的元素数组,它只存储你已经计算过的字符串的另一个副本!试试这个:
int a = in.nextInt();
String binary = Integer.toBinaryString(a);
int count = 0;
for (int j = 0; j < binary.length(); j++) {
//System.out.println(Arrays.toString(nums));
if (binary.charAt(j) == '1')
count++;
}
System.out.println(count);
这将检查数字1的二进制字符串的每个字符。