https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8
这道题思路不难,关键考察如何将十进制转为二进制。
除二取余
复习了一下如何“除二取余”运算,但明显这种方法比较臃肿了。
public static int NumberOf1(int n) {
int binary_n;
// 如果是负数,需要加上2^31次方
if (n < 0) {
binary_n = (int) (Math.pow(2, 31) + n);
} else {
binary_n = n;
}
String strBinary = "";
// 通过除二取余法,求出二进制数,保存在binary中
int shang = binary_n;
int yu;
int bit = 0;
while (shang != 0) {
yu = shang % 2;
shang = shang / 2;
bit++;
if (bit % 4 == 0) {
strBinary = " " + yu + strBinary;
} else {
strBinary = yu + strBinary;
}
}
// 不够32位,需要补齐
while (bit < 31) {
bit++;
if (bit % 4 == 0) {
strBinary = " " + "0" + strBinary;
} else {
strBinary = "0" + strBinary;
}
}
//判断符号位
if (n < 0) {
strBinary = "1" + strBinary;
} else {
strBinary = "0" + strBinary;
}
System.out.println(strBinary);
int count = 0;
for (char c : strBinary.toCharArray()) {
if (c == '1')
count++;
}
return count;
}