N的階乘末尾0的個數和其二進位制表示中最後位1的位置

2022-09-06 15:48:10 字數 1651 閱讀 1131

問題一解法:

我們知道求n的階乘結果末尾0的個數也就是說我們在從1做到n的乘法的時候裡面產生了多少個10,

我們可以這樣分解,也就是將從0到n的數分解成因式,再將這些因式相乘,那麼裡面有多少個10呢?

其實我們只要算裡面有多少個5就可以了?

因為在這些分解後的因子中,能產生10的可只有5和2相乘了,由於2的個數是大於5的個數的,因此

我們只要算5的個數就可以了。那麼這個題目就是算這些從1到n的數字分解成因子後,這些因子裡面

5的個數。

python**

def factorialnumberofzero

(v_value

):countoffive=0fornum in range(1

,v_value +1

):value

=num

while

((value %2

)==0)

and value

:value

/=2countoffive

+=1print countoffive

return

countoffive

問題二的解法:

那麼我們如何思考這個問題呢?

其實很簡單,我們只要算它的結果是2的多少冪的倍數就行了,假如結果是8,那麼8是2的3次冪,也就是說8的最後乙個1在倒數第4位。

那麼如何算n!是2的多少次冪呢?

當然我們只要算在乘的時候有從少個2相乘就可以了,還是和第一題那樣分解因子相乘啊,看因子裡總的2的個數。但是有沒有簡單的方法?

當然有我們看下10! ,那麼10!到底有多少個2呢?

呵呵,首先我們將10/2=5 也就是從10到1中有5個偶數

10、8、6、4、2

有多少個偶數肯定有多少個2啦,然後我們將它們除以2

5、4、3、2、1

這5個數裡面又有5/2=2個偶數。

4、2我們將4、2除以2,得到

2、1裡面有乙個2/1=1個偶數。

22/2=1  就沒有了。

看演算法:

def

factorialpositionoflastone

(v_value

):positioncount=0while

v_value

:v_value

>>=

1positioncount

+=v_value

print

positioncount

return

positioncount

來自為知筆記(wiz)

N階乘末尾0的個數

輸入乙個正整數n,求n 即階乘 末尾有多少個0?比如 n 10 n 3628800,所以答案為2 輸入為一行,n 1 n 1000 輸出乙個整數,即題目所求要判斷末尾有幾個0就是判斷可以整除幾次10。10的因子有5和2,而在0 9之間5的倍數只有乙個,2的倍數相對較多,所以本題也就轉換成了求n階乘中...

n的階乘末尾含0的個數

本博主曾被問過這樣乙個問題 求n的階乘中末尾含有多少個0。例如n 10,n 3628800,那麼n 末尾有兩個0。直接計算n 的值顯然不合適,因為n 數值太大,很容易溢位。而且這種無腦的計算方式,顯然不適合面試的時候裝nbility拿高薪offer。本博主當時被問這個問題的時候的第一反應就是 要相乘...

n的階乘問題 階乘位數 階乘末尾0的個數

初來乍到,望高手指教!原有解決n的階乘的方式 迭代,如果是大資料的話,迭代會吃掉大量記憶體,導致記憶體溢位 用平時的迭代解決n的階乘問題 在計算21的階乘時,結果已然為負數,超出整型資料表示範圍。計算34的階乘是,結果已然為0 此段 將n的階乘問題解決,實現無限大數的階乘!無限 兩字有點牽強,數字太...