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

来源:互联网 发布:如何开设淘宝店 编辑:程序博客网 时间:2024/06/05 18:00

题目第一种解法:


/************************************************************************//* 判断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)。


原创粉丝点击