您的位置:首页 > 其它

【CodeVS2860】阶乘末尾的零

2016-03-06 21:42 399 查看

Description

100的阶乘1*2*3*...*100结果是个很大的数,求这么大的数末尾有多少个连续的零。

Input

含有一个正整数N (N不大于100000000)。

Output

仅一个整数,表示N!的末尾有多少个连续的零。

Sample Input

1000

Sample Output

249

题解

根据算术基本定理(正整数唯一分解定理) N! = 2X * 3Y * 5Z * …

所有的0都是又2和5相乘得出的,而显然x>z,所以ans=z;

#include<iostream>
using namespace std;
int n,ans;
int main(){
cin>>n;
for (int i=5;i<=n;i+=5)
for (int c=i;c%5==0&&c>0;c/=5)  ans++;
cout<<ans;
}


写的时候犯了一个错误,for (;A,B;) 这样是条件A或条件B,而不是与。

进一步优化:z = [N/5] +[N/52] +[N/53] + …

#include<iostream>
using namespace std;
int n,ans;
int main(){
cin>>n;
for (int i=5;i<=n;i*=5) ans+=n/i;
cout<<ans;
}


维基百科 算术基本定理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: