您的位置:首页 > 其它

求N!的二进制表示中最低位1的位置

2013-01-14 23:15 302 查看
题目第一种解法:

/************************************************************************/
/* 判断N!的二进制数中最低位1的位置
解法一:
题目和上一题差不多,上一题是0的个数,这里是最低位1的位置,是类似的。
由于二进制中除以2能整除为0,所以,这个问题就是求二进制数种2个个数。*/
/************************************************************************/
int numberOfZeroInBinary(int n)
{
if(n < 0) return -1;
if(n == 0) return 0;

int ret = 0;
while(n)
{
n >>= 1;
ret += n;
}

return ret;
}


第二种解法:

/************************************************************************/
/* 判断N!的二进制数中最低位1的位置
解二:
*/
/************************************************************************/
int numberOfZeroInBinary2(int n)
{
return n - numberOfOne(n);

}

//计算N的二进制中含有1的个数
int numberOfOne(int n)
{
int numberOfOne = 0;
while(n)
{
n &= (n - 1);
numberOfOne++;
}

return numberOfOne;
}


最后,书中还提到了一个附加的题目:

解法就是求n & (n - 1)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: