这是我在spoj上的问题的链接。
我已经尝试过使用递归和非递归。但我收到超出时间限制的错误。如何改进我的解决方案?
我已经展示了以下两种解决方案。
A)非递归方法。
#include <stdio.h>
int main()
{
long long int t,n,i,j=0,y;
unsigned long long int fact;
scanf("%lld",&t);
i=t;
while(i>0)
{
scanf("%lld",&n);
fact=1;
for(y=1;y<=n;y++)
fact=fact*y;
j=0;
while(fact%10==0)
j++;
printf("\n%lld",j);
i--;
}
return 0;
}
B) 非递归
#include <stdio.h>
unsigned long long int fact(long long int);
int main()
{
long long int t,n,i,j=0;
unsigned long long int y;
scanf("%lld",&t);
i=t;
while(i>0)
{
scanf("%lld",&n);
y=fact(n);
j=0;
while(y%10==0)
j++;
printf("\n%lld",j);
i--;
}
return 0;
}
unsigned long long int fact(long long int m)
{
if(m==0)
return 1;
else
return (m*fact(m-1));
}