题目描述:
对于任意非负整数,求二进制展开位中的1的个数
算法分析:
算法实现:
#include <iostream>
using namespace std;
int countOnes(unsigned int n)
{
int ret = 0;
while(n) //数据仍然大于0
{
if(n & 1) //如果二进制最后是1就计数
{
ret++;
}
n = (n >> 1); //相当于减小二倍
}
return ret;
}
int main()
{
//0x1000101011
cout << "555:" << countOnes(555) << endl;
//1010011010
cout << "666:" << countOnes(555) << endl;
}
算法分析:
算法名称 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 |
---|---|---|---|---|
O(![]() | O(![]() | O(![]() | 0(1) |
每次右移一次,n减半,