从一道面试题说去 2
面試題目: 給定一個(gè)數(shù)n,求1*2*3*...*n 結(jié)果中末尾0的個(gè)數(shù)。
1. 我們先看一個(gè)特殊的例子,假設(shè)n是100的情況下。
? ? 根據(jù)題目的意思,我們需要求的是1*2*3*...*100的結(jié)果中末尾0的個(gè)數(shù)。
? ? 回顧一下小學(xué)4年級(jí)的數(shù)學(xué)知識(shí),一個(gè)數(shù)末尾加一個(gè)0,相當(dāng)于乘上一個(gè)10。
? ? ok,假設(shè)有一個(gè)能夠被10整除的數(shù)sum,那么sum = 10*N => 2*5*N。例如 50 = 10*5 = 2*5*5
? ? 好了,通過(guò)上面,我們可以發(fā)現(xiàn),10的個(gè)數(shù)是由2和5的個(gè)數(shù),并且有 10的個(gè)數(shù) = min(2的個(gè)數(shù),5的個(gè)數(shù))。
? ??
? ? 好了,回到題目,假設(shè)1*2*3*...*100 的結(jié)果是sum,那么sum = 10*N => 2*5*N。
? ? 根據(jù)上面的結(jié)論,實(shí)際上題目是要求結(jié)果中10的個(gè)數(shù),即2和5的最小的個(gè)數(shù)。
? ??
? ? 根據(jù)等式,1*2*3*4*...*100,可以發(fā)現(xiàn)4、6、8都包含2,因此2的個(gè)數(shù)比5來(lái)的多,因而10的個(gè)數(shù)決定于5的個(gè)數(shù)。
2. 要怎么求5的個(gè)數(shù)呢?
? ? 根據(jù)1~100這100個(gè)數(shù),能夠產(chǎn)生5的有5,10,15,20,25...95,100,并且如果數(shù)是5的次方,則包含多個(gè)5。
? ? 因此1~100這100個(gè)數(shù),總的5的個(gè)數(shù) 100/5+100/25 = 24. 因此1*2*3*...*100結(jié)果包含24個(gè)0
? ? ?
? ? 擴(kuò)展到n,1*2*3*...*n的結(jié)果中末尾包含0的個(gè)數(shù),等價(jià)于 n/5 + n/25 + n/125 + ...
總結(jié)
以上是生活随笔為你收集整理的从一道面试题说去 2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CSS3 keyframes动画实现弹跳
- 下一篇: 14.索引数组初始化