判断一个二进制中最后一位是否为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;
}