您的位置:首页 > 其它

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

2014-03-24 09:34 190 查看
判断一个二进制中最后一位是否为0,可以把这个二进制除以2,如果结果为0则把这个数向右移动了一位,否则说明这个数最后一位为1,无法整除2,。

所以这个问题可以变为N!中质因数2个个数,一个二相当于使其向左移动一位,非2的倍数相乘最后一位是1不变,因此只要判断里面质因数2的个数就可以了,其他不用管。

而N!中 1~N中能被2整除的N/2,能被4整除的N/4,能被8整除的N/8…………

所以可以的代码:

int lowestOne(int n)
{
int ret = 0;
while(n)
{
n >>= 4;
ret +=n;
}
return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: