码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 793 阶乘函数后K个零

时间:2020-05-02 17:12:21      阅读:48      评论:0      收藏:0      [点我收藏+]

标签:有一个   else   否则   int   数字   解题思路   public   solution   不容易   

基本上算是一道数学题,给出一个数字K,问有多少个非负整数的阶乘末尾有K个零。当初只知道答案只可能是0或5,因为末尾有0必定是2和5的乘积,每过五个数末尾0的数量一定会改变,求出阶乘有多少个2*5就不容易了,因为不可能实际求出阶乘。问题可以转变成求出有多少个因子5,因为2一定比5多,后来看了官方的解题思路,才明白怎么求出5的个数,阶乘中像5,10,15......每过5个数必有一个5的因子,像25,50,75。。。。。。每过52必定含有两个5,因为第一轮我们已经统计过这些数的其中一个因子5,所以我们在第二轮只需统计另一个因子5,一直重复下去直到第n轮X!中的X比5n要小,综上,我们可以这样求出阶乘中因子5的个数为?X/5?+?X/(52)?+?X/(532)?+?X/(54)?+?X/(5^5)?+......这个函数是递增的,我们可以用二分来找到是否有数满足这个条件,如果有,那必定是五个数,没有就返回0。注意变量尽量都用long long,否则很可能出现越界错误。

class Solution {
public:
    long long judge(long long x)
    {
        if(x>0)
            return x/5+judge(x/5);
        else
            return 0;
    }
    int preimageSizeFZF(int K) {
        long long l=0,r=0x7ffffffff,mid,now,flag=0;
        while(l<=r)
        {
            mid=l+(r-l)/2;
            now=judge(mid);
            if(now>K)
            {
                r=mid-1;
            }
            else if(now<K)
            {
                l=mid+1;
            }
            else
            {
                flag=1;break;
            }
        }
        if(flag) return 5;
        else return 0;
    }
};

LeetCode 793 阶乘函数后K个零

标签:有一个   else   否则   int   数字   解题思路   public   solution   不容易   

原文地址:https://www.cnblogs.com/ambition-hhn/p/12818485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!