文章
99
粉丝
120
获赞
8
访问
96.9k
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
while(cin>>n){
int cnt2 = 0, cnt5 = 0, temp = 2;
while(temp <= n){
cnt2 += n/temp;
temp *= 2;
}
temp = 5;
while(temp <= n){
cnt5 += n/temp;
temp *= 5;
}
cout<<min(cnt2, cnt5)<<endl;
}
}
求n的阶乘末尾连续0的个数,等价于求n!中5因子的个数,因为每有一对2和5,就会产生一个10,进而在末尾多一个0。
因为在阶乘中肯定有足够的偶数,所以只需考虑有多少5的因子即可。找出n! 中5的因子的方法是:先算出1到n 中有多少个5的倍数,
再算出多少个25的倍数,再算出多少个125的倍数……依次类推就行。
因为5的倍数有n/5个,其中每个数都有一个5;25的倍数有n/25个,其中每个数有额外的一个5;125的倍数有n/125个,其中每个数有额外的两个5……因此,n!中5的因子个数为n/5+n/25+n/125+... 一直到n/(5的k次方)为止。
登录后发布评论
暂无评论,来抢沙发