算法
求阶乘的时候,每个数的最后都会是一堆0
这是因为在阶乘的过程中,会出现2和5的组合
这样就是相当于乘10,也就是说在结果后面加了一个0
考虑到在从1到n中的这些数字中,5的倍数的数量是比2的倍数要少得多的
所以说为了要求最后一个非0数
我们只需要把5给去除掉即可
每当乘一个5的倍数的时候,这个数每能被5整除一次,我们都可以除以一个2
相当于消掉最后一位的0
另外为了防止爆int
需要进行取模处理
然后就能顺利AC!
C++ 代码
#include<iostream>
using namespace std;
int main(void)
{
long long n;
cin>>n;
long long temp=1;
for(int i=1;i<=n;i++)
{
if(i%5==0)
{
int a=i;
int cnt=0;
while(a%5==0)
cnt++,a/=5;
while(cnt--)
temp/=2;
temp*=a;
}
else
temp=(temp*i)%10000;
}
cout<<temp%10<<endl;
return 0;
}