1381阶乘
一、问题描述
N
N
N 的阶乘(记作
N
N
N!)是指从 1 到
N
N
N(包括 1 和
N
N
N)的所有整数的乘积。阶乘运算的结果往往都非常的大。现在,给定数字
N
N
N,请你求出
N
N
N! 的最右边的非零数字是多少。例如 5!=1×2×3×4×5=120,所以 5! 的最右边的非零数字是 2。
输入格式
共一行,包含一个整数
N
N
N。
输出格式
输出一个整数,表示
N
N
N! 的最右边的非零数字。
数据范围
1≤
N
N
N≤1000
输入样例
7
输出样例
4
二、问题分析
通过分析可以发现,我们可以将阶乘后的的数最后的k个0去掉后mod10即是正确答案,而每个0都是由2和5相乘得到的,且每个数的阶乘中能mod2为0的次数一定>=mod5为0的次数。故我们只需记录能整除2和5的次数,且在过程中mod10,最后再依次将多出的2乘上mod10即可。
代码如下(示例):
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,res=1;
int main()
{
cin>>n;
int a=0,b=0;
for(int i=1;i<=n;i++)
{
int x=i;
while(x%2==0)x/=2,a++;
while(x%5==0)x/=5,b++;
res=res*x%10;
}
for(int i=0;i<a-b;i++)res=res*2%10;
cout<<res<<endl;
return 0;
}