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;}
