思路
我们需要得到
2021
2021
2021的阶乘的后缀
0
0
0有多少,而后缀
0
0
0就是的个数其实就是有多少个10相乘,也就是多少个
2
×
5
2\times5
2×5,而我们可以知道要求多少个
2
∗
5
2*5
2∗5,其实只需要求有几个
5
5
5就行,因为从
1
1
1~
2021
2021
2021,2的个数必然会大于1。
现在我们已经明确思路:我们需要得到
2021
2021
2021的阶乘分解以后有多少个
5
5
5作乘数
举个栗子,从
1
1
1乘到
10
10
10,可以分解成
1
×
2
×
3
×
4
×
5
×
6
×
7
×
8
×
9
×
2
×
5
1 \times 2\times 3\times 4\times 5\times 6\times 7\times 8\times 9\times 2\times 5
1×2×3×4×5×6×7×8×9×2×5(后面的
2
×
5
2\times5
2×5就是
10
10
10)
我们可以看到10可以分解得到一个
5
5
5。
同理我们可以得到25可以分解成
5
×
5
5\times5
5×5,可以分解得到两个
5
5
5。
那么我们可以得到求
5
5
5的个数的递归函数代码如下
int func(int n){
if(n%5==0){
return 1+func(n/5);
}
else{
return 0;
}
}
代码
#include <iostream>
#include <algorithm>
#include <cmath>
#include<vector>
#include <cstring>
#define ll long long
#define ull unsigned ll
#define INF 0x7fffffff
using namespace std;
const int N = 1e5 + 5;
int func(int n){
if(n%5==0){
return 1+func(n/5);
}
else{
return 0;
}
}
void solve()
{
int n;
cin>>n;
int cnt = 0;
for(int i = 1;i <= n;i++){
cnt += func(i);
}
printf("%d",cnt);
}
int main()
{
solve();
return 0;
}
答案
503 503 503