Leetcode题库 172.阶乘后的零(C实现)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode题库 172.阶乘后的零(C实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 思路
- 方法1
- 方法2
- 代碼
- 方法1
- 方法2
思路
方法1
末尾每一個0都能看做是一個10
0的數量就轉換成n!=123*…n形成的10的數量
每一個10可以看作是25
10的數量就轉換成形成25的數量
5的數量:
第零個5=05
第一個5=15
第二個5=25
第三個5=35
第四個5=45
第五個5=55
第六個5=55
……
2的數量:
等價于偶數數量
第0個5~第1個5之間存在偶數,于是存在2
第1個5~第2個5之間存在偶數,于是存在2
……
由此可得是要有一個5,那么就會存在至少一個2與之相匹配
于是有2*5的數量就轉換成計算5的數量
方法2
序列0:1,2,3,4,5,6,7,8…<=n
序列1:5,10,15,20,25,30…5*m<=n
m=n/5
序列2:1,2,3,4,5,6,7,8…
序列3:5,10,15,20,25,30…5*m1<=m
m1=m/5
序列4:1,2,3,4,5,6,7,8…
序列5:5,10,15,20,25,30…5*m2<=m1
m2=m1/5
……
mi=m(i-1)/5
mi<5,停止迭代
m為1~n中能被5整除的數
m1為1~n中能被25整除的數
m2為1~n中能被125整除的數
……
于是5的數量=m+m1+…+m(i-1)
代碼
方法1
int trailingZeroes(int n){int ret=0, temp;for(int i=0;i<=n;i+=5){temp=i;while(temp%5==0 && temp/5>0){ret++;temp=temp/5;}}return ret; }方法2
int trailingZeroes(int n){int ret=0;while(n>0){ret+=n/5;n/=5;}return ret; }總結
以上是生活随笔為你收集整理的Leetcode题库 172.阶乘后的零(C实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop组件基本操作
- 下一篇: PCA主成分分析_特征创建(数据挖掘入门