题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
思路:运用”位运算“
代码:
#include<iostream>
using namespace std;
int NumberOf1(int n)
{
int count=0;
unsigned int flag=1;
while(flag)
{
if(n&flag)
count++;
flag=flag<<1;
}
return count;
}
int main()
{
int n;
cout<<"please enter a int:";
cin>>n;
cout<<n<<" has "<<NumberOf1(n)<<" one";
cout<<endl;
return 0;
}
扩展:以上算法复杂度与整数的位数有关。如果你分析,会发现以下结论:如果把一个整数减去1,再和原整合做与运算,会把该整数最右边一个1变为0.
reference:剑指Offer(何海涛著)