N 的阶乘(记作 N!)是指从 1 到 N(包括 1 和 N)的所有整数的乘积。
阶乘运算的结果往往都非常的大。
现在,给定数字 N,请你求出 N! 的最右边的非零数字是多少。
例如 5!=1×2×3×4×5=120,所以 5! 的最右边的非零数字是 2。
输入格式
共一行,包含一个整数 N。
输出格式
输出一个整数,表示 N! 的最右边的非零数字。
数据范围
1≤N≤1000
输入样例:
7
输出样例:
4
思路 :统计2和5因子产生的数量(2*5会产生尾数为0),我这里偷懒~~,没统计所有的2的个数
#include<iostream>
#include<memory.h>
using namespace std;
int c[1010];
int n,res;
int mod=10;
void qmod(int a,int b){
if(b==0) return ;
if(b&1){
res=(res*a)%mod;b-=1;
}else{
a=(a*a)%mod;b/=2;
}
qmod(a,b);
}
int main(){
cin>>n;
memset(c,0,sizeof c);
for(int i=1;i<=n;i++){
if(i%5==0){ //遇到能整除5的数不断分解统计5的个数
int temp=i,cnt=0;
while(temp%5==0 ){
temp/=5;
cnt++;
}
c[5]+=cnt;
c[temp]++;
}else{
if(i%2==0){ //遇到能整除2的数直接c[2]++;c[i/2]++;(偷懒ing)
c[i/2]++; c[2]++;
}else{
c[i]++;
}
}
}
int ans=1;
c[2]=c[2]-c[5];
c[5]=0;
for(int i=2;i<=n;i++){
res=1;
qmod(i,c[i]);
ans=(ans*res)%10;
}
cout<<ans%10;
return 0;
}