阶乘(factorial) 牛客小白月赛5

题目链接:阶乘(factorial)

问题描述: 1! 2! 3! …n! 阶乘相乘的末尾零的个数

输入描述:

输入数据共一行,一个正整数n,意义如“问题描述”。
输出描述:

输出一行描述答案:

一个正整数k,表示S的末尾有k个0

输入:

1
10

输出:

1
7

说明:

对于100%的数据,1<=n<=1e8

题目让求阶乘最后有几个0,即为该表达式的最后结果含有10的几次方的因子,直接求的话,不太好求 不妨转化一下思路,容易发现10的几次方都有一个通性:质因子只有2和5,

显然,阶乘中 质因子2的个数比5多。所以这个题可以转换为 求 因子5的个数,5的个数即是所求末尾0的个数,那么此题就迎刃而解了

AC代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
typedef long long ll;
using namespace std;
int main()
{
ll n, sum = 0, cnt = 0;
cin >> n;
for(int i = 5;i <= n;i ++)
{
ll t = i;
while(t%5==0)
{
cnt++;
t /= 5;
}
sum += cnt;
}
cout<<sum<<endl;
return 0;
}
hey!baby,站住,点它!