文章

99

粉丝

120

获赞

8

访问

75.1k

头像
求n的阶乘末尾连续0的个数
备考心情
发布于2024年8月18日 10:46
阅读数 717

#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次方)为止。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发