1. 程式人生 > >二進制中1的個數

二進制中1的個數

範圍 als ret blog ber 題目 clas == 解法

題目描述:輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。

負數的補碼:減一取反 或者 取反加一

int 類型的範圍是-231 ~ 231-1

我的做法:麻煩還不對

class Solution {
public:
     int  NumberOf1(int n) {
         if(n == 0)
             return 0;
         int num = 0;
         int con = n;
         bool flag = false;
         if(n % 2 == 1)
             num
++; n = n/2; if(num == 1) flag = true; while(n) { if(n % 2 == 1) num++; n = n/2; } if(con > 0) return num; else { if(flag) return
15-num+1+1; else return 15-num+1; } } };

正確解法:

class Solution {
public:
     int  NumberOf1(int n) {
         int count=0;
         unsigned int flag=1;  
         while(flag){
             if (n & flag){
                 count++;
             }
          flag
=flag<<1; } return count; } };

或者:

class Solution {
public:
     int  NumberOf1(int n) {
 
        int count = 0;
        while (n != 0) {
            ++count;
            n = (n - 1) & n;
        }
        return count;
     }
};

二進制中1的個數