目录
题目描述
求出1!*2!*3!*4!*……*n!的末尾有几个零
输入格式
n(n<=10^8)
输出格式
有几个零
样例输入
10
样例输出
7
思路
题目询问末尾有几个零,我们知道只有乘10才会让末尾多一个零
10的质因数相乘形式是2*5
10在算式中的数量的数量为min(质因子2的个数,质因子5的个数)
算式中质因子5的个数肯定比质因子2的个数多
10在算式中的数量的数量为质因子5的个数
末尾0的个数就是算式分解质因数后5的个数
Code
#include <iostream>
using namespace std;
typedef long long ll;
ll n,ans=0,s=0;//ans记录算式中总共有几个质因子5,s记录每个阶乘有几个质因数5
signed main()
{
cin>>n;//输入数据
//枚举每个阶乘
for(int i=1;i<=n;i++)
{
int t=i;//用t来记录i的值,用于后面的计算
//如果t是5的倍数,证明此阶乘比上一个阶乘质因子5的数量多
while(t%5==0)
{
s++;//质因子5的数量增加
t/=5;//将t除以5,用于记录下一个五的倍数
}
ans+=s;//将以前质因子5的数量,加上这个阶乘质因子5的数量
}
cout<<ans;//输出答案
return 0;
}