判斷一個二進制中最後一位是否爲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;
}