每天一道LeetCode-----计算n的阶乘末尾有多少个0
生活随笔
收集整理的這篇文章主要介紹了
每天一道LeetCode-----计算n的阶乘末尾有多少个0
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Factorial Trailing Zeroes
原題鏈接Factorial Trailing Zeroes
計算n!(n的階乘)末尾有多少個0
思路:
0實際上來源于10,而10來源于2×5,所以只需要判斷n×(n?1)×(n?2)×...×1n×(n?1)×(n?2)×...×1可以拆分成多少個2×52×5即可。而2的個數明顯多于5的個數,所以只需要判斷有多少個5即可
考慮1到100這100個數可以分成多少個5
首先可以想到5,10,15,20,...,1005,10,15,20,...,100這100/5=20100/5=20個數可以分解成5×m5×m的形式,所以這20個數每個數都可以分出一個5來
其次考慮25,50,75,10025,50,75,100這100/5/5=4100/5/5=4個數可以分解成5×5×m5×5×m的形式,所以這4個數每個數又可以分出一個5來
注,由于計算5的倍數時25,50,75,100已經分解出一個5,所以計算25的倍數時僅剩下一個5可以分解
所以100!末尾0的個數就是5的個數即100/5+100/5/5=24100/5+100/5/5=24個
如果給出的n足夠大,那么
- 可以分解成5×m5×m形式的數可以貢獻出一個5,總共有n/5n/5個
- 可以分解成5×5×m5×5×m形式的數可以貢獻出一個5,總共有n/5/5n/5/5個
- 可以分解成5×5×5×m5×5×5×m形式的數可以貢獻出一個5,總共有n/5/5/5n/5/5/5個
- …
最后計算總數量即可
代碼如下
class Solution { public:int trailingZeroes(int n) {int res = 0;for(long long int i = 5; n / i > 0; i *= 5)res += n / i;return res;}};總結
以上是生活随笔為你收集整理的每天一道LeetCode-----计算n的阶乘末尾有多少个0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCP/IP学习笔记(一)分层模型概述
- 下一篇: 每天一道LeetCode-----将数值