其实这题跟数阶乘后面有少个个0,做法差不多。我们先把2和5都剥离出来,那么就把10全部都给去掉,也就是后面没有0了,然而2的个数必然比5多,我们又要重新把2乘回去,最后取个位就ok了。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
#include<string>
#include<queue>
#include<stack>
#include<bitset>
#include<list>
#define IO ios::sync_with_stdio(false)
#define int long long
using namespace std;
int n,p,a[100005],ans=1,cnt2,cnt5;
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int k=i;
while(k%2==0)cnt2++,k/=2;
while(k%5==0)cnt5++,k/=5;
ans=((ans%10)*(k%10))%10;
}
for(int i=1;i<=cnt2-cnt5;i++)
{
ans=(ans*2)%10;
}
cout<<ans%10;
}

650

被折叠的 条评论
为什么被折叠?



