最小N使得N!的末尾恰有Q个0——SGU154 Factorial

给出数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不是自然数!

View Code
#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");
}
}

原文地址:https://www.cnblogs.com/huhuuu/p/2021562.html