统计二进制数中1的个数
(牛客网—牛客题霸算法篇—NC120)
题目描述
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。
数据范围:−2147483648<=n<=2147483647
思路
Java实现
先判断数据n的正负,如果是负数的话,令n=-n,然后将n转化成二进制数,再遍历统计1的个数。
需要注意的当n=−2147483648时,转化成正数时会出现越界的情况,要把−2147483648单独处理。
代码实现
public class Solution {
//进制转化
public String convert(int M) {
// write code here
if(M==0)
return "0";
StringBuffer sb=new StringBuffer();
while(M!=0){
sb.append(M%2);
M=M/2;
}
return sb.reverse().toString();
}
//统计1的个数
public int NumberOf1(int n) {
if(n==0)
return 0;
if(n==-2147483648)
return 1;
int num=0;
boolean flag=true;
if(n<0){
n=-n;
flag=false;
}
String s=convert(n);
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='1')
num++;
}
if(flag==false){
num=num+(32-s.length());
}
return num;
}
}