Python蓝桥杯刷题-小数第n位详解
题目描述
我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。
如果我们把有限小数的末尾加上无限多个 0,它们就有了统一的形式。
本题的任务是:在上面的约定下,求整数除法小数点后的第 n 位开始的 3 位数。
输入描述
输入一行三个整数:a b n,用空格分开。a 是被除数,b 是除数,n 是所求的小数后位置(0<a,b,n<10的9次方)
输出描述
输出一行 3 位数字,表示:a 除以 b,小数后第 n 位开始的 3 位数字。
分析
首先,我们得明确几个关键点:
1. 如何处理除法后的循环小数?比如像1/3=0.(3)这样的无限循环小数,如何快速定位到第n位?
2. 当小数部分是有限的时候,比如1/8=0.125,之后都是0,这时候如果n超过有效位数,后面的三位应该是0吗?
3. 题目中的n的范围很大,可能到1e9,所以直接进行除法计算然后取小数点后的位数是不现实的,必须找到数学方法或规律来快速定位。
我们来思考如何解决这些问题。
a除以b的结果的小数部分可以分为两种情况:有限小数和无限循环小数。但根据题目描述,题目将所有有限小数视为末尾有无限个0的形式。例如,0.125被视为0.125000...。因此,无论哪种情况,我们都可以将小数部分视为一个循环体,或者是有限小数后面跟着无限个0的循环。
那如何找到小数点后的第n位开始的三个数字呢?
我们先处理除法后的余数,找到小数部分的每一位。但由于n可能非常大,直接逐位计算到第n位是不现实的。必须找到数学上的规律,或者利用模运算的性质来快速定位。我们知道,当进行除法时,余数的重复出现会导致循环的开始。例如,计算1/7=0.(142857),余数会依次出现1→3→2→6→4→5→1,循环开始。因此,如果能找到余数的循环周期,就能快速定位到第n位的位置。
但这里的问题可能不需要找到整个循环周期,而是直接通过计算余数来找到第n位。因为每次余数乘以10再除以b,得到下一位的数字,同时余数更新为新的余数。这个过程可以表示为:
对于第k位小数,余数r_k = (r_{k-1} * 10) % b,而该位的数字是 (r_{k-1} * 10) // b。
因此,要找到第n位,只需要计算到第n次余数,然后取该位的数字。但问题是,n可能非常大,比如1e9,直接迭代计算n次显然会超时。因此,必须找到一种快速计算到第n位余数的方法。
这时候,快速幂模运算派上用场。因为每次余数的计算相当于乘以10,再取模b。而这个过程可以视为求10的幂次模b的值,然后应用到初始余数上。
方法思路
-
余数判断:首先计算 amod b。如果余数为0,则所有小数位均为0,直接输出"000"。
-
快速幂模运算:利用快速幂算法计算
,以快速定位到第 n 位。
-
逐位计算:通过余数逐位计算第 n、n+1、n+2 位的数字,并处理循环小数或后续全0的情况。
具体分析
-
小数部分的规律:
-
小数部分是通过不断将余数乘以10,再除以 b得到的。
-
比如 1÷8:
-
余数 1×10=10,10÷8=1(第1位是1),余数是 2。
-
余数 2×10=20,20÷8=2(第2位是2),余数是 4。
-
余数 4×10=40,40÷8=5(第3位是5),余数是 0。
-
-
-
快速定位到第 n 位:
-
直接逐位计算到第 n 位会很慢(比如 n=10的9次方)。
-
我们可以用 快速幂 来快速计算
,这样可以直接跳到第 n 位对应的余数。
-
-
逐位生成数字:
-
从第 n 位开始,通过余数逐位计算3位数字。
-
解决代码
a, b, n = map(int, input().split())
remainder = a % b # 初始余数
if remainder == 0: # 如果能整除,小数部分全是0print("000")
else:# 快速幂计算 10^(n-1) % b,快速跳到第 n 位power = pow(10, n - 1, b)# 计算第 n 位对应的余数current_remainder = (remainder * power) % b# 逐位生成3位数字digits = []for _ in range(3):digit = (current_remainder * 10) // b # 当前位的数字digits.append(digit)current_remainder = (current_remainder * 10) % b # 更新余数# 输出结果print(f"{digits[0]}{digits[1]}{digits[2]}")
该方法利用快速幂和模运算高效处理大数问题,时间复杂度为 O(logn),适用于极大范围的输入。
例子
我们可以换个例子再感受一下:
-
a=3,b=7,n=4。
-
我们需要找到 3÷7 的小数部分从第4位开始的连续3位数字。
小数部分的生成规律
首先,我们来看 3÷7 的小数部分是如何生成的:
-
余数 3×10=30,30÷7=4(第1位是4),余数是 2。
-
余数 2×10=20,20÷7=2(第2位是2),余数是 6。
-
余数 6×10=60,60÷7=8(第3位是8),余数是 4。
-
余数 4×10=40,40÷7=5(第4位是5),余数是 5。
-
余数 5×10=50,50÷7=7(第5位是7),余数是 1。
-
余数 1×10=10,10÷7=1(第6位是1),余数是 3。
-
余数 3×10=30,30÷7=4(第7位是4),余数是 2。
-
以此类推,小数部分为
0.428571428571...,循环节是428571。
如果我们直接逐位计算到第4位,需要计算4次。但如果 nn 很大(比如 n=109n=109),逐位计算会非常慢。快速幂 的作用是帮助我们快速计算出第4位对应的余数,从而跳过前面的计算。
我们需要计算 ,即 10的3次方mod 7。
-
将指数 3 表示为二进制形式:
。
-
通过平方和乘法快速计算 10的3次方:
-
。
-
。
-
-
-
计算 1000mod 7:
-
1000÷7=142余 6,所以 1000mod 7=6。
-
跳到第4位
-
初始余数:3mod 7=3。
-
快速幂计算:10的3次方 mod 7=6。
-
跳到第4位对应的余数:(3×6)mod 7=18mod 7=4。
-
逐位生成数字:
-
第4位:(4×10)÷7=5,余数是 5。
-
第5位:(5×10)÷7=7,余数是 1。
-
第6位:(1×10)÷7=1,余数是 3。
-
-
输出结果:
571。
关于快速幂相关知识,参考快速幂知识点
相关文章:
Python蓝桥杯刷题-小数第n位详解
题目描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 0,它们就有了统一的形式。 本题的任务是:在上面的约定下,求整数除法小数点后的第 n 位开…...
Ubuntu服务器 /data 盘需要手动挂载的解决方案
服务器 /data 盘需要手动挂载的解决方案 如果重启服务器后,发现 /data 盘 没有自动挂载,通常是因为: /etc/fstab 配置文件 没有正确设置 自动挂载。该磁盘 没有被正确识别,需要手动挂载。文件系统错误 导致挂载失败。 下面是解…...
无法打开包括文件: “crtdbg.h”: No such file or directory
目录 无效解决措施(重装WindowsSDK) 有效解决措施 创建环境变量 添加环境变量INCLUDE 添加环境变量LIB RC无法运行 问题现象描述 复制以下文件至Error路径 无效解决措施(重装WindowsSDK) 参考文献:94176676/227706449-a5222d7d-d8d2-4a19-addb-8f546e69786f…...
番茄工作法html实现
对比了deepseek-r1-online和本地部署的14b的版本,输出的输出的html页面。 在线满血版的功能比较强大,可以一次完成所有要求。14b版本的功能有一些欠缺,但是基本功能也是写了出来了。 input write a html named Pomodoro-clock which “hel…...
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
多源 BFS 是一种解决 边权为 1 的多源最短路问题 的高效算法。其核心思想是将所有源点视为一个“超级源点”,通过一次 BFS 遍历即可计算所有节点到最近源点的最短距离。以下从原理、实现和代码示例三个方面深入讲解: 目录 一、原理分析 1. 单源 BFS vs…...
使用IDEA提交SpringBoot项目到Gitee上
登录Gitee并新建仓库 创建本地仓库 提交本地代码到本地仓库 提交本地代码到远程仓库...
我们来学人工智能 -- DeepSeek客户端
DeepSeek客户端 题记使用后记系列文章 题记 我选择了 Cherry Studio是国内产品由CherryHQ团队开源是一个平台在这里,有豆包、kimi、通义千问的入口当然,最主要是作为大模型的UI正如标题,这里,作为DeepSeep的客户端 使用 下载本…...
【Linux】匿名管道的应用场景-----管道进程池
目录 一、池化技术 二、简易进程池的实现: Makefile task.h task.cpp Initchannel函数: 创建任务: 控制子进程: 子进程执行任务: 清理收尾: 三、全部代码: 前言: 对于管…...
JavaScript函数-函数的使用
在JavaScript编程中,函数不仅是组织代码的基本单元,也是实现复杂逻辑、提高代码复用性和可维护性的关键工具。无论你是刚开始学习JavaScript的新手,还是希望深入理解函数使用的开发者,本文都将为你提供全面的指导。 函数的基础知…...
水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 代码+开发文档+视频教程
水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 【亮点功能】 1.SpringbootVueElement-UIMysql前后端分离 2.Echarts图表统计数据, 直观展示数据情况 3.发表评论后,用户可以回复评论, 回复的评论可以被再次回复, …...
Android输入事件传递流程系统源码级解析
1. 硬件层到Linux内核 设备节点:触摸事件由内核驱动捕获,写入/dev/input/eventX。关键结构体:input_event(包含时间戳、类型、代码、值)。 2. Native层处理(system_server进程) 2.1 EventHub …...
自制操作系统学习第七天
今天要做什么? 实现HLT,不让计算机处于HALT(HLT).用C语言实现内存写入(错误,需要分析) 一:使用HLT,让计算机处于睡眠状态 写了下面这个程序,naskfunc.nas 函数名叫io_h…...
【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】
最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…...
Coze插件之基于IDE创建插件
上篇文章中,我们基于已有服务创建了一些插件和工具。方便我们开发更多工作流和智能体应用。 本篇文章要介绍的是基于IDE进行创建,为什么有了基于服务创建后还有基于IDE进行创建呢?基于IDE进行创建有哪些优势? 对于一些简单操作&…...
deepseek的模型经过训练 ai写出了linux 64位加壳软件
1. 加壳程序的设计目标 目标:保护64位Linux下的可执行文件,使其难以被反编译或调试。核心功能: 在运行时加载原始可执行文件并解密。隐藏壳代码和原程序的真正入口点。提供一定的反调试机制。 2. 思路 加壳流程: 加载器…...
解锁音频新境界:LALAL.AI 与 Audo Studio 深度解析
在音频处理的世界里,噪音常常是困扰我们的一大难题。无论是专业的音频工作者,还是普通的音频爱好者,都渴望拥有一款强大的工具来解决这个问题。今天,就为大家介绍两款来自 AI 工具导航(AIDH.NET)的 AI 语音…...
Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警
1 介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案,该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置,主要包括以下几个功能: Kubernetes 自定义资源:使用 Kube…...
20250221 NLP
1.向量和嵌入 https://zhuanlan.zhihu.com/p/634237861 encoder的输入就是向量,提前嵌入为向量 二.多模态文本嵌入向量过程 1.文本预处理 文本tokenizer之前需要预处理吗? 是的,文本tokenizer之前通常需要对文本进行预处理。预处理步骤可…...
【C++】const关键字的作用及常见应用场景
一、核心作用 用于定义“常量”,限制程序对变量的修改,提升代码安全性和可读性。其核心作用包括: 避免误修改:明确标识不可变数据。编译器优化:常量可被放入符号表,减少内存访问,优化执行效率…...
04控制流
一、二路分支 逻辑:程序中某段代码需要在满足某个条件时才能运行形式: if 语句:表达一种 如果-则 的条件执行关系if-else 语句:表达一种 如果-否则 的互斥分支关系 流程图: 注意: if 语句可以单独使用&…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
