题解 | #二进制中1的个数#

二进制中1的个数

http://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int NumberOf1(int n ) {
    if(n==-2147483648UL){                         //特殊数字特殊处理
        return 1;
    }
    int res=0;
    if(n>=0){
        while(n>=2){
            if(n%2==1){
                res++;
            }
            n/=2;
        }
        if(n==1){
            res++;
        }
        return res;    
    }
    else{
        n=-n;
        int str[100]={0},index=0;
        while(n>=2){
            str[index++]=!(n%2);
            n/=2;
        }
        str[index]=!n;
        for(int i=index+1;i<31;i++){
            str[i]=1;
        }
        str[31]=1;str[0]++; 
        for(int i=0;i<32;i++){
            if(str[i]==2){
                str[i]=0;
                str[i+1]++;
            }
        }
        for(int i=31;i>=0;i--){
            if(str[i]==1){
                res++;
            }
        }
        return res;
    }
    return 0;
}
全部评论

相关推荐

头像
04-29 10:53
已编辑
东北大学 自动化类
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务