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;
    }
};


猜你喜欢

转载自blog.csdn.net/ZRXSLYG/article/details/80627793