首先对于求阶乘最后一位非零数程序运行的效率并不好,这个方法对每一个数据都进行了处理,因此,速度上受到了一点限制。但是思路却很简单,代码量较小(注:想要提高效率需要考虑阶乘的计算方法细节,网上很多)。
Input to the program is a series of nonnegative integers not exceeding 10000
#include <cstdio>
int main()
{
int sum, n, i, k, res;
while(scanf("%d", &n) != EOF)
{
sum = 0;
res = 1;
for(i = n; i >= 5; i = i / 5) {
sum += i / 5;
}
for(i = 1; i <= n; ++i) {
k = i;
while(k % 2 == 0 && sum) {
k = k / 2;
sum--;
}
while(k % 5 == 0) {
k = k / 5;
}
res = (res * k) % 10;
}
printf("%5d -> %d\n", n, res);
}
return 0;
}
效率更低但更好理解更简单的代码如下:
#include<cstdio>
int main()
{
int n,i;
long long s;
while(scanf("%d",&n)!=EOF)
{
s=1;
for(i=2;i <= n;i++)
{
s*=i;
while(s%10==0) s/=10;
s=s%100000;
}
printf("%5d -> %lld\n",n,s%10);
}
return 0;
}