溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Lintcode2 Trailing Zeros solution 題解

發(fā)布時(shí)間:2020-06-10 05:41:23 來源:網(wǎng)絡(luò) 閱讀:371 作者:coderer 欄目:軟件技術(shù)

【題目描述】

Write an algorithm which computes the number of trailing zeros in n factorial.

設(shè)計(jì)一個(gè)算法,計(jì)算出n階乘中尾部零的個(gè)數(shù)。

【題目鏈接】

http://www.lintcode.com/en/problem/trailing-zeros/

【題目解析】

傳統(tǒng)解法是首先求出n!,然后計(jì)算末尾0的個(gè)數(shù)。(重復(fù)÷10,直到余數(shù)非0)該解法在輸入的數(shù)字稍大時(shí)就會(huì)導(dǎo)致階乘得數(shù)溢出,不足取。

O(logn)解法:一個(gè)更聰明的解法是考慮n!的質(zhì)數(shù)因子。后綴0總是由質(zhì)因子2和質(zhì)因子5相乘得來的。如果我們可以計(jì)數(shù)2和5的個(gè)數(shù),問題就解決了。考慮下面的例子:

n = 5: 5!的質(zhì)因子中 (2 * 2 * 2 * 3 * 5)包含一個(gè)5和三個(gè)2。因而后綴0的個(gè)數(shù)是1。

n = 11: 11!的質(zhì)因子中(2^8 * 3^4 * 5^2 * 7)包含兩個(gè)5和三個(gè)2。于是后綴0的個(gè)數(shù)就是2。

我們很容易觀察到質(zhì)因子中2的個(gè)數(shù)總是大于等于5的個(gè)數(shù)。因此只要計(jì)數(shù)5的個(gè)數(shù)就可以了。那么怎樣計(jì)算n!的質(zhì)因子中所有5的個(gè)數(shù)呢?一個(gè)簡單的方法是計(jì)算floor(n/5)。例如,7!有一個(gè)5,10!有兩個(gè)5。除此之外,還有一件事情要考慮。諸如25,125之類的數(shù)字有不止一個(gè)5。例如,如果我們考慮28!,我們得到一個(gè)額外的5,并且0的總數(shù)變成了6。處理這個(gè)問題也很簡單,首先對(duì)n÷5,移除所有的單個(gè)5,然后÷25,移除額外的5,以此類推。

【參考答案】

http://www.jiuzhang.com/solutions/trailing-zeros/


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI