阶乘的后缀0的个数

请添加图片描述

计算阶乘的后缀0的个数

思路

我们需要得到 2021 2021 2021的阶乘的后缀 0 0 0有多少,而后缀 0 0 0就是的个数其实就是有多少个10相乘,也就是多少个 2 × 5 2\times5 2×5,而我们可以知道要求多少个 2 ∗ 5 2*5 25,其实只需要求有几个 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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值