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

时间:2022-08-25 02:15:46

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

题目第一种解法:

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

/************************************************************************/
/* 判断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的位置

/************************************************************************/
/* 判断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!的二进制表示中最低位1的位置

解法就是求n & (n - 1)。