解题思路:32位有符号整数的表示范围:-2147483648—2147483647。32位无符号整数的表示范围:0—2147483647+2147483648。如果输入的无符号数大于2147483647,则会显示成负数,所以当输入数字小于0时,只需加上2147483647+1,之后按照整数求1的个数,此时需要将1的个数加1.
Java代码实现:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count=0;
if(n==0) return 0;
if(n<0) {
System.out.print(n);
n+=2147483647+1;
System.out.print(n);
count++;
}
while(n!=0){
int mod=n%2;
if(mod==1) count++;
n=n/2;
}
return count;
}
}
原题题目:
https://leetcode.com/problems/number-of-1-bits/