1. 程式人生 > >LeetCode 793.階乘函式後K個零 Preimage Size of Factorial Zeroes Function

LeetCode 793.階乘函式後K個零 Preimage Size of Factorial Zeroes Function

題目描述

找出有多少非負整數,其階乘的結果有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;
    }
};