给出数Q,求出最小的自然数N使得N!的末尾恰有Q个0,无解输出"No solution"
对于一个数n,求出它的末尾有几个0,只需看n之内的数的质因子5的个数,因为2的个数远多于5。所以可知道一个数末尾0的个数
Q = n/5 + n/(5^2) + n/(5^3) + ...
Q = N(5^k - 1) / [4*(5^k)],由此得
N = 4Q * [(5^k)/(5^k-1)]
还有就是注意0不是自然数!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h>
int fun(int n)
{
int add=0;
while(n)
{
add+=n/5;
n/=5;
}
return add;
}
int main()
{
int n;
scanf("%d",&n);
if(n==0)
{
printf("1\n");
return 0;
}
int p=n*4/5*5;
while(fun(p)<n)
{
p+=5;
}
if(fun(p)==n)
{
printf("%d\n",p);
}
else
{
printf("No solution\n");
}
}