连续阶乘
题目描述
题目分析
解决方案
题目描述
一个正整数的阶乘是所有小于及等于该数的正整数的积。有一天实验室里的小伙伴们想知道1000的阶乘有多少位,你使用计算机编写了一个程序运行了一段时间得到了结果,但是看到末尾那一长串的零,你突然想知道这末尾多有多少连续的零。
例如5!=120,其右边有1个零。
输入
输入一个整数n(1<=n<=1000)
输出
输出一个整数,表示n的阶乘右边有多少个连续的零。
输入样例:
5
输出样例:
1
题目分析
思路:右边有多少个连续的零,也就是10的多少次方,那么只需要知道n的阶乘的质因数里面2和5的次数即可。而我们容易知道,任意一个数的阶乘因子里面5的个数不会大于2,所以只需要求5的个数。
由于n<=1000,符合范围的5的k次幂只有5,25,125和625。因此,只需要求从1到n中,所有5的倍数的质因子里面5的次数,并将其相加即可。
解决方案:
#include <iostream>
using namespace std;
int numOfFive(int k){
if(k==625)
return 4;
if(!(k%125))
return 3;
if(!(k%25))
return 2;
return 1;
}
int main(){
int k,cnt=0;
cin>>k;
for(int i=5;i<=k;i+=5)
cnt+=numOfFive(i);
cout<<cnt;
return 0;
}