題目描述:
對於任意非負整數,求二進制展開位中的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減半,