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