要求的是n!的二進位制表示中最低位1的位置。給定乙個整數n,求n!二進位制表示的最低位1在第幾位?例如:給定n = 3,n!= 6,那麼n!的二進位制表示(1 010)的最低位1在第二位。
為了得到更好的解法,首先要對題目進行一下轉化。
首先來看一下乙個二進位制數除以2的計算過程和結果是怎樣的。
把乙個二進位制數除以2,實際過程如下:
判斷最後乙個二進位制位是否為0,若為0,則將此二進位制數右移一位,即為商值(為什麼);反之,若為1,則說明這個二進位制數是奇數,無法被2整除(這又是為什麼)。
所以,這個問題實際上等同於求n!含有質因數2的個數+1。即答案等於n!含有質因數2的個數加1。 實際上n!都為偶數,因為質因數裡面都有乙個2,除了1以外,因為1的階乘是1,是個奇數,其他數的階乘都是偶數。。
【問題2的解法一】
由於n! 中含有質因數2的個數,等於 n/2 + n/4 + n/8 + n/16 + …[1],
根據上述分析,得到具體演算法,如下所示:
int lowestone(intnum)
return res+1;//
m為n!中質因數2的個數,所以最後結果要加 1
}
不要被階乘嚇倒(二進位制表示中最低位1的位置 )
原文 統計乙個整數n的因子個數的方法 將n進行素因子分解,n q1 r1 q2 r2 qi ri 則n的因子數為 r1 1 r2 1 ri 1 階乘 factorial 是個很有意思的函式,但是不少人都比較怕它,我們來看看兩個與階乘相關的問題 1 給定乙個整數n,那麼n的階乘n!末尾有多少個0呢?例...
1的二進位制表示
我們已經知道計算機中,所有資料最終都是使用二進位制數表達。我們也已經學會如何將乙個10進製數如何轉換為二進位制數。不過,我們仍然沒有學習乙個負數如何用二進位制表達。比如,假設有一 int 型別的數,值為5,那麼,我們知道它在計算機中表示為 00000000 00000000 00000000 000...
演算法實踐 二進位制中最低位的位置
給定乙個16位的十進位制數,請把該數轉換為二進位制數來看待。請找到該數看為二進位制後,其最低位的1出現的位置。也就是這個數最低位的1是二進位制中的第幾位呢?以1開頭的二進位制數的十進位制表示b.例如輸入9.輸出k,表示b中的1在第k位 k 0,1,2 15 9的最低位的1出現在位置0.90中,low...