二進制中1的個數
阿新 • • 發佈:2018-03-18
範圍 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) return15-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的個數