当前位置: 首页 > news >正文

趣味算法------尾部零的个数(C语言,python双重解法)

 

目录

题目描述:

解题思路:

具体代码:

注意:


题目描述:


给出数字 n(0<n<1000000),计算出 n 阶乘尾部零的个数。

输入输出格式
输入格式
一个整数。
输出格式
一个整数。

输入输出样例
输入
11
输出
2

说明/提示
11! = 39916800,结尾的 0 有 2 个。


解题思路:

        我们以输入11为例,11的阶乘为 1*2*3*4*5*6*7*8*9*10*11,其中 2*5 可以得出10,阶乘中又包含10,两个10相乘得出尾部两个0,如果输入25,得出25的阶乘为1*2*3*4......*23*24*25。其中4可以拆成 2*2,25可以拆成5*5,由于尾部0可以由偶数和5的倍数相乘得到。在阶乘过程中通过拆分2的个数一定比5的个数多,所以我们只需要统计阶乘中的每一个数字可以拆分成几个5,然后求和得到结果。


具体代码:

#include<stdio.h>
int main(void)
{int n;int count = 0;scanf("%d", &n);for (int i = 1; i <= n; i++){int k = i;//复制阶乘中的每一个数字。while (k)//当这个数字不为0时。{if (k % 5 == 0)//如果这个数字可以拆分出5{count++;k /= 5;}elsebreak;}}printf("%d", count);//输出结果。
}

注意:

        很多新手小白或者先学习python后刚刚接触C语言的同学可能会犯一个错误,就是没有用k复制 i ,认为这是多此一举,如果真是这样,代码就是这个样子。

#include<stdio.h>
int main(void)
{int n;int count = 0;scanf("%d", &n);for (int i = 1; i <= n; i++){while (i)//当这个数字不为0时。{if (i % 5 == 0)//如果这个数字可以拆分出5{count++;i /= 5;}elsebreak;}}printf("%d", count);//输出结果。
}

        假设 i = 5,先通过while循环每一步过程使得 i 变成 1,然后通过for循环一轮一轮自增又变成5,通过while循环每一步过程使得 i 变成 1,然后通过for循环一轮一轮自增又变成5......然后发现陷入了死循环,

        而python不会陷入这个循环就是因为python写法是

        

n =  int(input())
count = 0
for i in range(2,n+1):while i:if i%5 == 0:count += 1i //= 5else:break
print(count)

        i 的取值是for循环一步一步复制range循环里的数字,而不是通过自增改变值。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【微信小程序】使用 npm 包 - API Promise化-- miniprogram-api-promise
  • 出现Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty报错
  • C语言函数介绍(上)
  • [Qt][QSS][下]详细讲解
  • Makefile简单使用
  • [论文笔记]Improving Retrieval Augmented Language Model with Self-Reasoning
  • 基于神经塑性的地球观测多模态基础模型 (慕尼黑工业大学, TUM)
  • zookeeper集群安装
  • 标配M4芯片!苹果三款Mac新品蓄势待发
  • lucene搜索关键词错误
  • 企业级web应用服务器tomcat
  • 学习前端面试知识(15)
  • 强制输出wParam 和 lParam,会是什么内容?
  • 数据仓库系列 3:数据仓库的主要组成部分有哪些?
  • jmeter中CSV 数据文件设置用例
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript中的对象个人分享
  • Making An Indicator With Pure CSS
  • PHP 7 修改了什么呢 -- 2
  • rabbitmq延迟消息示例
  • Terraform入门 - 1. 安装Terraform
  • vagrant 添加本地 box 安装 laravel homestead
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 初探 Vue 生命周期和钩子函数
  • 记一次用 NodeJs 实现模拟登录的思路
  • 你真的知道 == 和 equals 的区别吗?
  • 使用parted解决大于2T的磁盘分区
  • 问题之ssh中Host key verification failed的解决
  • 物联网链路协议
  • 一个JAVA程序员成长之路分享
  • 《天龙八部3D》Unity技术方案揭秘
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​configparser --- 配置文件解析器​
  • # 飞书APP集成平台-数字化落地
  • (2)MFC+openGL单文档框架glFrame
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (30)数组元素和与数字和的绝对差
  • (33)STM32——485实验笔记
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (超详细)语音信号处理之特征提取
  • (二)学习JVM —— 垃圾回收机制
  • (九)信息融合方式简介
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转载)Linux网络编程入门
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net 按比例显示图片的缩略图
  • .NET 命令行参数包含应用程序路径吗?
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NetCore 如何动态路由