zoukankan      html  css  js  c++  java
  • LeetCode 793 阶乘函数后K个零

    基本上算是一道数学题,给出一个数字K,问有多少个非负整数的阶乘末尾有K个零。当初只知道答案只可能是0或5,因为末尾有0必定是2和5的乘积,每过五个数末尾0的数量一定会改变,求出阶乘有多少个2*5就不容易了,因为不可能实际求出阶乘。问题可以转变成求出有多少个因子5,因为2一定比5多,后来看了官方的解题思路,才明白怎么求出5的个数,阶乘中像5,10,15......每过5个数必有一个5的因子,像25,50,75。。。。。。每过5²必定含有两个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;
        }
    };
    
  • 相关阅读:
    angular2^ typescript 将 文件和Json数据 合并发送到服务器(1.客户端处理)
    错误的尝试:回射程序改进2
    XML Schema笔记
    回射程序改进1
    DTD笔记
    XML语法笔记
    判断IPv6地址合法性
    线程相关函数(POSIX线程):
    使用string实现一个用于储存那些太大而无法使用 long long 的数
    基本SCTP套接字编程常用函数
  • 原文地址:https://www.cnblogs.com/ambition-hhn/p/12818485.html
Copyright © 2011-2022 走看看