2019年[海淀区赛 第2题] 阶乘

题目描述

n的阶乘定义为n!=n*(n -1)* (n - 2)* ...* 1。n的双阶乘定义为n!!=n*(n -2)* (n -4)* ...* 2或n!!=n(n - 2)*(n - 4)* ...* 1取决于n的奇偶性,但是阶乘的增长速度太快了,所以我们现在只想知道n!和n!!末尾的的个数

输入格式

一个正整数n (n <= )

输出格式

两个整数分别为n!和n!!末尾0的个数

样例输入#1

10

样例输出#1

2 1

样例输入#2

5

样例输出#2

1 0

参考代码

cpp 复制代码
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;

int main()
{
	freopen("factorial.in", "r", stdin); //此处为海淀区赛指定文件名
	freopen("factorial.out", "w", stdout);//考场代码,必须加文件输入输出
	
	ll n, cnt_5, cnt_2;
	scanf("%lld", &n);
	
	cnt_5 = cnt_2 = 0;
	
	for(ll i = 1; i <= n; i++)
	{
		ll tmp = i;
		
		while(tmp % 5 == 0)
		{
			cnt_5++;
			tmp /= 5;
		}
		
		tmp = i;
		 
		while(tmp % 2 == 0)
		{
			cnt_2++;
			tmp /= 2;
		}
	}
	
	printf("%lld ", min(cnt_2, cnt_5));
	cnt_5 = cnt_2 = 0;

	if(n % 2 != 0)
	{
		for(ll i = n; i >= 1; i -= 2)
		{
			ll tmp = i;
			
			while(tmp % 5 == 0)
			{
				cnt_5++;
				tmp /= 5;
			}
			
			tmp = i;
			 
			while(tmp % 2 == 0)
			{
				cnt_2++;
				tmp /= 2;
			}
		}
	}
	else
	{
		for(ll i = n; i >= 2; i -= 2)
		{
			ll tmp = i;
			
			while(tmp % 5 == 0)
			{
				cnt_5++;
				tmp /= 5;
			}
			
			tmp = i;
			 
			while(tmp % 2 == 0)
			{
				cnt_2++;
				tmp /= 2;
			}
		}
	}
	
	printf("%lld", min(cnt_5, cnt_2));
	
	return 0;
}
相关推荐
z_mazin8 分钟前
逆向一种私有二进制序列化格式:从零到字节级解析器
网络·python·网络协议·算法·rpc
luj_17688 分钟前
罚球线右移破防新策略
c语言·开发语言·网络·经验分享·算法
vivo互联网技术10 分钟前
SmartPhotoCrafter: 先思考后修图,统一理解-生成的图像优化新范式
人工智能·算法·计算机视觉
legendary_16319 分钟前
PD‑SINK芯片在无协议后端负载中的工程应用
c语言·开发语言·人工智能·智能手机·计算机外设
Nuanyt22 分钟前
JVM常见核心知识梳理02 类加载 字节码技术 双亲委派 Java内存模型 JMM 并发底层 volatile synchronized 常见排障与调优工具
java·开发语言·jvm
吞下星星的少年·-·24 分钟前
LeetCode 热题 100 两数之和(哈希表)
算法·leetcode·哈希算法
Shan120529 分钟前
经典算法题示例与详解:飞地的数量(二)
java·数据结构·算法
蒸蒸yyyyzwd31 分钟前
面经学习笔记
c++·面试·八股
liliangcsdn39 分钟前
IC计算-前向/远期收益计算和代码示例
开发语言·python·pandas
小溪学编程1 小时前
Java ListIterator 接口详解:双向遍历与列表修改的利器
java·开发语言·windows