原题传送门
题目描述
也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:
12!=1×2×3×4×5×6×7×8×9×10×11×12=479,001,600
12的阶乘最右边的非零位为6。
写一个程序,计算N(1≤N≤50,000,000)阶乘的最右边的非零位的值。
注意:10,000,000!有24999992499999个零。
输入格式
仅一行包含一个正整数N。
输出格式
一个整数,表示最右边的非零位的值。
输入输出样例
输入 #1
12
输出 #1
6
说明/提示
USACO Training Section 3.2
------------------------------------------以下为题解部分--------------------------------------------------------------
分析:
思路:
这道题一看就可以发现,是非常容易用暴力解出来的。我们只需要乘出来阶乘的结果,暴力取余+判断,就可以完美的AC过了。
原因:
首先这道题数据较弱,从N的范围就可以略知一二:
N(1≤N≤50,000,000)
暴力刚好可以AC,于是。。。。。。
代码:
#include<iostream>
using namespace std;
int main(){
ios::sync_with_stdio(false);
long long ans=1; //阶乘变量
int n;
cin>>n;
for(int i=1;i<=n;i++){
ans*=i; //计算阶乘
while(ans%10==0) ans/=10; //去掉末尾无用的0
ans=ans%100000000; //玄学的强大力量(数据太弱)
}
cout<<ans%10;
return 0;
}