阶乘
N 的阶乘(记作 N!)是指从 1 到 N(包括 1 和 N)的所有整数的乘积。
阶乘运算的结果往往都非常的大。
现在,给定数字 N,请你求出 N! 的最右边的非零数字是多少。
例如 5!=1×2×3×4×5=120,所以 5! 的最右边的非零数字是 2。
输入格式
共一行,包含一个整数 N。
输出格式
输出一个整数,表示 N! 的最右边的非零数字。
数据范围
1≤N≤1000
输入样例:
7
输出样例:
4
#include<bits/stdc++.h>
using namespace std;
/*
0只可能由2的倍数和5的倍数相乘得到,
所以在进行乘法的过程中,将2和5的倍数给清理掉,
这样就保证了不会出现0,然后控制其范围,每次相乘取其个位,
因为个位肯定是非零元素,十位以后的数字完全没有必要保留下来,
最后,将多处理的2或者5重新乘回去再取余
*/
int main(){
int n;
scanf("%d",&n);
long long fac=1;
int tot2=0,tot5=0;
for(int i=1;i<=n;i++){
int tmp = i;
while (!(tmp % 2)) tmp /= 2, ++ tot2; // 清理因子2
while (!(tmp % 5)) tmp /= 5, ++ tot5 ; // 清理因子5
fac = fac * tmp % 10; //相乘以后取个位
}
for(int i=0;i<tot2-tot5;i++){
fac=fac*2%10;
}
cout<<fac<<endl;
return 0;
}