题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解题思路:
方法一:n&flag 其中flag为1 然后每次与之后flag=flag<<1;这种方式是为了避免负数导致出现的死循环
方法二:n&(n-1) 此时是将n的右面最后一位1变为0,也就是去掉了一个1,重复操作直至n为0
1 #include <iostream> 2 using namespace std; 3 class Solution { 4 public: 5 int NumberOf1(int n) { 6 int count = 0; 7 while(n) 8 { 9 n = n & (n-1); 10 count++; 11 } 12 return count; 13 } 14 }; 15 int main() 16 { 17 int n; 18 while(cin>>n) 19 { 20 Solution s; 21 cout<<n<<"的二进制中包含1的个数为:"<<s.NumberOf1(n)<<endl; 22 } 23 return 0; 24 }
程序运行结果如图: