题目第一种解法:
/************************************************************************/
/* 判断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)。