(一)计算N!末尾0的个数,两种方法的代码如下:
(二)计算N!的二进制表示中最低位1的位置,比如N = 3, N! = 6,二进制表示是:1010,则所求的最低位的1在第二位上。
解法一、问题可以转化一下:
一个二进制数除以2的过程是:判断一个二进制位是否为0,若为0,则将此二进制数右移一位,即为商值;反之,若为1,则说明这个二进制数是奇数,无法被2整除。因此这个问题实际上等价于求 N! 中含有质因数2的个数,最终答案为:N!含有质因数2的个数加1。
解法二、N!中含有质因数2的个数,还等于N减去N的二进制表示中1的数目。
(三)给定一个整数n,判断它是否为2的方幂。判断条件:n>0 && ((n & (n-1)) == 0)) .函数如下: