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

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的值,然后应用到初始余数上。

方法思路

  1. 余数判断:首先计算 amod  b。如果余数为0,则所有小数位均为0,直接输出"000"。

  2. 快速幂模运算:利用快速幂算法计算 10^{n-1} mod b,以快速定位到第 n 位。

  3. 逐位计算:通过余数逐位计算第 n、n+1、n+2 位的数字,并处理循环小数或后续全0的情况。

具体分析

  1. 小数部分的规律

    • 小数部分是通过不断将余数乘以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。

  2. 快速定位到第 n 位

    • 直接逐位计算到第 n 位会很慢(比如 n=10的9次方)。

    • 我们可以用 快速幂 来快速计算 10^{n-1} mod b,这样可以直接跳到第 n 位对应的余数。

  3. 逐位生成数字

    • 从第 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(log⁡n),适用于极大范围的输入。

 例子

我们可以换个例子再感受一下:

  • a=3,b=7,n=4。

  • 我们需要找到 3÷7 的小数部分从第4位开始的连续3位数字。

小数部分的生成规律

首先,我们来看 3÷7 的小数部分是如何生成的:

  1. 余数 3×10=30,30÷7=4(第1位是4),余数是 2。

  2. 余数 2×10=20,20÷7=2(第2位是2),余数是 6。

  3. 余数 6×10=60,60÷7=8(第3位是8),余数是 4。

  4. 余数 4×10=40,40÷7=5(第4位是5),余数是 5。

  5. 余数 5×10=50,50÷7=7(第5位是7),余数是 1。

  6. 余数 1×10=10,10÷7=1(第6位是1),余数是 3。

  7. 余数 3×10=30,30÷7=4(第7位是4),余数是 2。

  8. 以此类推,小数部分为 0.428571428571...,循环节是 428571

如果我们直接逐位计算到第4位,需要计算4次。但如果 nn 很大(比如 n=109n=109),逐位计算会非常慢。快速幂 的作用是帮助我们快速计算出第4位对应的余数,从而跳过前面的计算。

我们需要计算 10^{n-1} mod b,即 10的3次方mod  7。

  1. 将指数 3 表示为二进制形式:3 = 2^{1} + 2^{0}

  2. 通过平方和乘法快速计算 10的3次方:

    • 10^{1} = 10

    • 10^{2} = (10^{1})^{2} = 100

    • 10^{3} = 10^{1} * 10^{2} = 10*100 = 1000

  3. 计算 1000mod  7:

    • 1000÷7=142余 6,所以 1000mod  7=6。

跳到第4位

  1. 初始余数:3mod  7=3。

  2. 快速幂计算:10的3次方 mod  7=6。

  3. 跳到第4位对应的余数:(3×6)mod  7=18mod  7=4。

  4. 逐位生成数字:

    • 第4位:(4×10)÷7=5,余数是 5。

    • 第5位:(5×10)÷7=7,余数是 1。

    • 第6位:(1×10)÷7=1,余数是 3。

  5. 输出结果:571

关于快速幂相关知识,参考快速幂知识点

相关文章:

Python蓝桥杯刷题-小数第n位详解

题目描述 我们知道&#xff0c;整数做除法时&#xff0c;有时得到有限小数&#xff0c;有时得到无限循环小数。 如果我们把有限小数的末尾加上无限多个 0&#xff0c;它们就有了统一的形式。 本题的任务是&#xff1a;在上面的约定下&#xff0c;求整数除法小数点后的第 n 位开…...

Ubuntu服务器 /data 盘需要手动挂载的解决方案

服务器 /data 盘需要手动挂载的解决方案 如果重启服务器后&#xff0c;发现 /data 盘 没有自动挂载&#xff0c;通常是因为&#xff1a; /etc/fstab 配置文件 没有正确设置 自动挂载。该磁盘 没有被正确识别&#xff0c;需要手动挂载。文件系统错误 导致挂载失败。 下面是解…...

无法打开包括文件: “crtdbg.h”: No such file or directory

目录 无效解决措施(重装WindowsSDK) 有效解决措施 创建环境变量 添加环境变量INCLUDE 添加环境变量LIB RC无法运行 问题现象描述 复制以下文件至Error路径 无效解决措施(重装WindowsSDK) 参考文献&#xff1a;94176676/227706449-a5222d7d-d8d2-4a19-addb-8f546e69786f…...

番茄工作法html实现

对比了deepseek-r1-online和本地部署的14b的版本&#xff0c;输出的输出的html页面。 在线满血版的功能比较强大&#xff0c;可以一次完成所有要求。14b版本的功能有一些欠缺&#xff0c;但是基本功能也是写了出来了。 input write a html named Pomodoro-clock which “hel…...

多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题

多源 BFS 是一种解决 边权为 1 的多源最短路问题 的高效算法。其核心思想是将所有源点视为一个“超级源点”&#xff0c;通过一次 BFS 遍历即可计算所有节点到最近源点的最短距离。以下从原理、实现和代码示例三个方面深入讲解&#xff1a; 目录 一、原理分析 1. 单源 BFS vs…...

使用IDEA提交SpringBoot项目到Gitee上

登录Gitee并新建仓库 创建本地仓库 提交本地代码到本地仓库 提交本地代码到远程仓库...

我们来学人工智能 -- DeepSeek客户端

DeepSeek客户端 题记使用后记系列文章 题记 我选择了 Cherry Studio是国内产品由CherryHQ团队开源是一个平台在这里&#xff0c;有豆包、kimi、通义千问的入口当然&#xff0c;最主要是作为大模型的UI正如标题&#xff0c;这里&#xff0c;作为DeepSeep的客户端 使用 下载本…...

【Linux】匿名管道的应用场景-----管道进程池

目录 一、池化技术 二、简易进程池的实现&#xff1a; Makefile task.h task.cpp Initchannel函数&#xff1a; 创建任务&#xff1a; 控制子进程&#xff1a; 子进程执行任务&#xff1a; 清理收尾&#xff1a; 三、全部代码&#xff1a; 前言&#xff1a; 对于管…...

JavaScript函数-函数的使用

在JavaScript编程中&#xff0c;函数不仅是组织代码的基本单元&#xff0c;也是实现复杂逻辑、提高代码复用性和可维护性的关键工具。无论你是刚开始学习JavaScript的新手&#xff0c;还是希望深入理解函数使用的开发者&#xff0c;本文都将为你提供全面的指导。 函数的基础知…...

水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 代码+开发文档+视频教程

水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 【亮点功能】 1.SpringbootVueElement-UIMysql前后端分离 2.Echarts图表统计数据, 直观展示数据情况 3.发表评论后&#xff0c;用户可以回复评论, 回复的评论可以被再次回复, …...

Android输入事件传递流程系统源码级解析

1. 硬件层到Linux内核 设备节点&#xff1a;触摸事件由内核驱动捕获&#xff0c;写入/dev/input/eventX。关键结构体&#xff1a;input_event&#xff08;包含时间戳、类型、代码、值&#xff09;。 2. Native层处理&#xff08;system_server进程&#xff09; 2.1 EventHub …...

自制操作系统学习第七天

今天要做什么&#xff1f; 实现HLT&#xff0c;不让计算机处于HALT&#xff08;HLT&#xff09;.用C语言实现内存写入&#xff08;错误&#xff0c;需要分析&#xff09; 一:使用HLT&#xff0c;让计算机处于睡眠状态 写了下面这个程序&#xff0c;naskfunc.nas 函数名叫io_h…...

【多模态处理篇三】【DeepSeek语音合成:TTS音色克隆技术揭秘】

最近帮某明星工作室做AI语音助手时遇到魔幻需求——要求用5秒的咳嗽声克隆出完整音色!传统TTS系统直接翻车,生成的语音像得了重感冒的电音怪物。直到祭出DeepSeek的TTS音色克隆黑科技,才让AI语音从"机器朗读"进化到"声临其境"。今天我们就来扒开这个声音…...

Coze插件之基于IDE创建插件

上篇文章中&#xff0c;我们基于已有服务创建了一些插件和工具。方便我们开发更多工作流和智能体应用。 本篇文章要介绍的是基于IDE进行创建&#xff0c;为什么有了基于服务创建后还有基于IDE进行创建呢&#xff1f;基于IDE进行创建有哪些优势&#xff1f; 对于一些简单操作&…...

deepseek的模型经过训练 ai写出了linux 64位加壳软件

1. 加壳程序的设计目标 目标&#xff1a;保护64位Linux下的可执行文件&#xff0c;使其难以被反编译或调试。核心功能&#xff1a; 在运行时加载原始可执行文件并解密。隐藏壳代码和原程序的真正入口点。提供一定的反调试机制。 2. 思路 加壳流程&#xff1a; 加载器&#xf…...

解锁音频新境界:LALAL.AI 与 Audo Studio 深度解析

在音频处理的世界里&#xff0c;噪音常常是困扰我们的一大难题。无论是专业的音频工作者&#xff0c;还是普通的音频爱好者&#xff0c;都渴望拥有一款强大的工具来解决这个问题。今天&#xff0c;就为大家介绍两款来自 AI 工具导航&#xff08;AIDH.NET&#xff09;的 AI 语音…...

Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警

1 介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案&#xff0c;该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置&#xff0c;主要包括以下几个功能&#xff1a; Kubernetes 自定义资源&#xff1a;使用 Kube…...

20250221 NLP

1.向量和嵌入 https://zhuanlan.zhihu.com/p/634237861 encoder的输入就是向量&#xff0c;提前嵌入为向量 二.多模态文本嵌入向量过程 1.文本预处理 文本tokenizer之前需要预处理吗&#xff1f; 是的&#xff0c;文本tokenizer之前通常需要对文本进行预处理。预处理步骤可…...

【C++】const关键字的作用及常见应用场景

一、核心作用 用于定义“常量”&#xff0c;限制程序对变量的修改&#xff0c;提升代码安全性和可读性。其核心作用包括&#xff1a; 避免误修改&#xff1a;明确标识不可变数据。编译器优化&#xff1a;常量可被放入符号表&#xff0c;减少内存访问&#xff0c;优化执行效率…...

04控制流

一、二路分支 逻辑&#xff1a;程序中某段代码需要在满足某个条件时才能运行形式&#xff1a; if 语句&#xff1a;表达一种 如果-则 的条件执行关系if-else 语句&#xff1a;表达一种 如果-否则 的互斥分支关系 流程图&#xff1a; 注意&#xff1a; if 语句可以单独使用&…...

5分钟快速上手:PotPlayer字幕翻译插件百度版终极使用教程

5分钟快速上手&#xff1a;PotPlayer字幕翻译插件百度版终极使用教程 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为看不懂的外…...

Windows API实战:从局部热键到全局钩子,构建键盘鼠标监控系统

1. 从局部热键到全局钩子的技术演进 在Windows开发中&#xff0c;键盘鼠标监控是自动化工具和辅助软件的基础功能。我刚开始接触这个领域时&#xff0c;也是从最简单的RegisterHotKey函数入手。记得第一次成功实现CtrlAltD快捷键弹出调试窗口时的兴奋感&#xff0c;就像找到了通…...

别再死记硬背了!用Wireshark抓包实战,5分钟搞懂UDS网络层(ISO-15765)的SF/FF/CF/FC帧

用Wireshark解密UDS网络层&#xff1a;从抓包实战理解ISO-15765帧结构 当你第一次面对UDS诊断协议的网络层时&#xff0c;那些抽象的概念和术语可能会让你感到无从下手。单帧(SF)、首帧(FF)、连续帧(CF)、流控帧(FC)这些名词在文档中反复出现&#xff0c;但纸上得来终觉浅。作为…...

GD32F103替换STM32F103,除了Pin to Pin还要注意这几点(硬件篇)

GD32F103替换STM32F103硬件设计实战指南 当硬件工程师面临元器件替换决策时&#xff0c;GD32F103系列作为STM32F103的经济型替代方案&#xff0c;确实能显著降低BOM成本。但在实际项目中&#xff0c;我们往往发现那些宣称"Pin to Pin兼容"的芯片&#xff0c;总会在某…...

SENT协议在新能源汽车BMS中的应用实战:如何用SAE J2716标准传输电池温度与电压

SENT协议在新能源汽车BMS中的高可靠数据传输实践 新能源汽车的电池管理系统&#xff08;BMS&#xff09;如同人体的神经系统&#xff0c;需要实时感知每个电池模组的生命体征。而SENT协议正是承载这些关键神经信号的数字传输通道。在高压、强电磁干扰的复杂车载环境中&#xff…...

EventBus @Subscribe注解全解析:除了threadMode,sticky和priority这两个属性你用对了吗?

EventBus Subscribe注解深度解析&#xff1a;解锁sticky与priority的高级玩法 当EventBus的Subscribe注解出现在你的Android代码中时&#xff0c;大多数开发者可能只关注了threadMode这个属性。但今天我们要把聚光灯转向两个常被忽视却同样强大的功能&#xff1a;sticky事件和p…...

个人健康管理系统小程序pf(文档+源码)_kaic

第5章 系统实现进入到这个环节&#xff0c;也就可以及时检查出前面设计的需求是否可靠了。一个设计良好的方案在运用于系统实现中&#xff0c;是会帮助系统编制人员节省时间&#xff0c;并提升开发效率的。所以在系统的编程阶段&#xff0c;也就是系统实现阶段&#xff0c;对于…...

哪些降重软件可以同时降低查重率和AIGC疑似率?2026年5款顶流工具深度黑盒实测

引言&#xff1a;在2026年的盲审里&#xff0c;你的论文正面临一场“被猎杀”的灾难 几天前&#xff0c;我的一个直博学弟在实验室崩溃大哭。他苦熬大半年、查重率仅有3.2%的完美终稿&#xff0c;在学院第一波预审中被无情“斩立决”。退回的理由极其刺眼&#xff1a;系统判定…...

用MSP430和Cyclone IV FPGA实现单相逆变电源的PID闭环控制(附完整代码)

MSP430FPGA架构下的单相逆变电源PID闭环控制实战解析 在电力电子控制领域&#xff0c;实现高精度电压输出一直是工程师面临的挑战。当MSP430微控制器遇上Cyclone IV FPGA&#xff0c;这种混合架构为单相逆变电源的控制带来了独特优势——MCU负责复杂算法运算&#xff0c;FPGA专…...

Rust的#[derive(PartialEq, Eq)]派生宏与等价关系在自定义类型中的一致性

Rust语言中的类型系统以其严谨性著称&#xff0c;而#[derive(PartialEq, Eq)]派生宏则为自定义类型的等价关系提供了优雅的实现方式。等价关系是数学中的基本概念&#xff0c;要求满足自反性、对称性和传递性。在编程中&#xff0c;正确实现这些性质对于数据比较、集合操作等场…...