先扫一遍统计因数 5 的个数 k (因数 2 的个数显然大于 因数 5 的个数)
再扫一遍把 k 个 5 和 k 个 2 除掉, 那么接下来每次结果都mod 10就是了
/*
PROG:fact4
LANG:C++
*/
#include <cstdio>
using namespace std;
int n, ans = 1, cnt2, cnt5;
int main()
{
freopen("fact4.in", "r", stdin);
freopen("fact4.out", "w", stdout);
scanf("%d", &n);
for (int i = 1;i <= n;++i)
{
int j = i;
while (j % 5 == 0)
{
++cnt5;
j /= 5;
}
}
cnt2 = cnt5;
for (int i = 1;i <= n;++i)
{
int j = i;
while (j % 5 == 0 && cnt5) --cnt5, j /= 5;
while (j % 2 == 0 && cnt2) --cnt2, j /= 2;
ans = (ans * j) % 10;
}
printf("%d\n", ans);
}