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

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章