思路
- 在1,2,3,4,5,6,7,8,9中九个数里面,可以产生后尾0的只有包含2因子的数和5相乘的结果,所以计算出阶乘中2与5的因子个数,利用因子个数差和其它的因子相乘%10就可以产生非零的数
- 5的因子怎么乘最后%10都是5
- 2的因子相乘最后%10 有四种情况2 4 8 6 。不能直接乘,因为数会溢出
code
#include <bits/stdc++.h>
using namespace std;
int a[4]={2,4,8,6};
int main(){
long long n,ans=1,cnt1=0,cnt2=0;
cin>>n;
for(long i=1;i<=n;i++){
long long x=i;
while(x%2==0){
cnt1++;
x/=2;
}
while(x%5==0){
cnt2++;
x/=5;
}
ans=ans*x%10;
}
if(cnt1==cnt2) ans*=1;
else if(cnt1>cnt2) ans=ans*a[(cnt1-cnt2-1)%4]%10;
else ans=ans*5%10;
cout<<ans<<endl;
return 0;
}