JZ11 二进制中1的个数

二进制中1的个数

https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8?tpId=13&&tqId=11164&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

2021年9月13日00:02:54
原码
反码
补码

public class Solution {
    public int NumberOf1(int n) {
        if(n ==0) return 0;

        int num = 0;
        if(n > 0 ){
            while(n >0){
                if(n%2 == 1) num++;
                n = n/2;
            }
        }
        else{
            int[] nums = new int[32];
            n = -n;
            int k = 31;
            nums[0] = 1;
            while(n>0){
                nums[k] = n%2;
                n = n/2;
                k--;
            }
            for(int i=31; i>0;i--){
                if(nums[i] == 0) nums[i] = 1;
                else nums[i] = 0;
            }

            nums[31]++;
            int jin = 0;

            for(int i=31; i>0;i--){
                nums[i] = nums[i] + jin;
                if(nums[i]>1) {nums[i] = 0;jin = 1;}
                else jin = 0;
            }
            for(int i=31; i>=0;i--){
                if(nums[i] == 1) num ++;
            }
        }
        return num;
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务