分治算法N!个数为0的情况

Posted 肉松松松松

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分治算法N!个数为0的情况相关的知识,希望对你有一定的参考价值。

 题目地址     https://www.cnblogs.com/hao-tian/p/9274708.html

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;

long long solve(long long n)
{
    long long sum=0;
    while(n>0)
    {
        n/=5LL;
        sum+=n;
    }
    return  sum;
}


int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        long long left=1;
        long long right=500000000;
        long long ans=500000001;
        while(left<=right)
        {
            int mid=(right-left)/2+left;
            int t=solve(mid);
            if(t==n&&mid<ans)
            {
                ans=mid;
            }
            if(t>n)
            {
                right=mid-1;
            }
            else if(t<n)
            {
                left=mid+1;
            }
            else
            {
                right=mid-1;
            }
        }
        if(ans==500000001)
        {
            printf("No solution!\\n");
        }
        else
        {
            printf("%d\\n",ans);
        }
    }
}

  

以上是关于分治算法N!个数为0的情况的主要内容,如果未能解决你的问题,请参考以下文章

《算法导论》读书笔记

选第k小元素:分治策略

算法漫游指北(第十篇):泛型递归递归代码模板递归思维要点分治算法回溯算法

以下代码片段的算法复杂度

分治算法-----二分求最大最小

利用分治法求n个数的最大连续和