LeetCode 793.階乘函式後K個零 Preimage Size of Factorial Zeroes Function
阿新 • • 發佈:2018-12-11
找出有多少非負整數,其階乘的結果有k個0
那先來看看,每個數的階乘的結果有多少個0:
0~4的階乘,有0個0
5~9的階乘,有1個0
10~14的階乘,有2個0
........
如果階乘的結果存在k個0,那就對應有有五個數
如果階乘的結果不存在k個0,那就0個數
相當於說k有效(存在數的階乘的結果有k個0),就返回5;k無效(沒有任何數的階乘的結果有k個0),就返回0。
所以問題在於,怎麼知道k有沒有效。
好吧,記住一下幾個數字。
1
6,6=5+1
31,31=25+5+1
156,156=125+25+5+1
........
所有無效的k都與以上這些數字有關。
程式碼如下:
class Solution { public: int preimageSizeFZF(int K) { int i=1,sum=1; while(K>sum) sum+=(i*=5);//sum=1+5+25+125+... if(K<sum)//保證K>=sum { sum-=i; i/=5; } int c=K-sum;//求差值 while(c) { if(sum==1&&K==5) return 0; if(c/sum==5||c%sum==5) return 0;//差值與5有關的,就是無效 c%=sum; sum-=i; i/=5; } return 5; } };