P1134 [USACO3.2]阶乘问题
作者:互联网
也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:
12!= =1×2×3×4×5×6×7×8×9×10×11×12=479,001,600
1212的阶乘最右边的非零位为66。
写一个程序,计算N(1≤N≤50,000,000)阶乘的最右边的非零位的值。
注意:10,000,000!10,000,000!有24999992499999个零。
--
最初想法是保留一位,后来发现乘出0时这位没了,
然后觉得保留两位,后来发现它又没了,
不知道保留多少位,一看题解
?
%1000000
?
okok it's right;
我知道可以暴力但我没想到这么暴力,当场一个卧槽+抓头发。
正解是找规律but..这个mod真的很香
#include<bits/stdc++.h> using namespace std; int main() { long long ans=1; long long n; cin>>n; for(int i=1;i<=n;i++) { ans*=i; while(ans%10==0) ans/=10; ans%=1000000; } while(ans%10==0) ans/=10; printf("%d",ans%10); }
标签:10,12,零位,long,USACO3.2,000,阶乘,P1134 来源: https://www.cnblogs.com/liyishui2003/p/15386144.html