P1530 分数化小数 Fractions to Decimals【洛谷算法习题】

发布时间:2026/9/28 12:57:39

P1530 分数化小数 Fractions to Decimals【洛谷算法习题】
P1530 分数化小数 Fractions to Decimals网页链接P1530 分数化小数 Fractions to Decimals题目描述写一个程序输入一个形如N D \dfrac{N}{D}DN​的分数输出它的小数形式。如果小数有循环节的话把循环节放在一对圆括号中。例如1 3 0.33333333 … \dfrac{1}{3}0.33333333\ldots31​0.33333333…写成0. ( 3 ) 0.(3)0.(3)41 333 0.123123123 … \dfrac{41}{333} 0.123123123\ldots33341​0.123123123…写成0. ( 123 ) 0.(123)0.(123)整数x xx写成x .0 x.0x.0。输入格式输入包含两个整数N NN和D DD1 ≤ N , D ≤ 10 5 1 \leq N,D \leq 10^51≤N,D≤105。输出格式输出按照上面规则计算出的小数表达式。如果结果长度大于76 7676每行输出76 7676个字符。输入输出样例 #1输入 #145 56输出 #10.803(571428)说明/提示翻译来自NOCOWUSACO 2.4解题思路本题是模拟长除法 循环节检测的经典题型核心是通过记录每次除法后的余数来定位循环节的起点和长度并按要求格式化输出。1. 问题等价转化分数转小数整数部分为⌊ N / D ⌋ \lfloor N/D \rfloor⌊N/D⌋若整除则补.0。小数部分通过不断将余数乘10 1010后除以D DD获得每一位。有限与循环若分母D DD的所有质因子只包含2 22和5 55则小数有限直接除尽即可。否则为无限循环小数循环节从某次出现重复余数时开始。循环节定位在模拟除法时用数组bk[x]记录余数x xx实际上是当前被除数n nn即上一轮余数乘10 1010首次出现的位置已输出的小数位数。当同一个被除数再次出现时两次出现之间的部分即为一个循环节。2. 算法实现预处理与输出整数部分计算q N / D输出q.。若N % D 0补0后直接结束。初始化计数器v已输出字符数用于控制每行76 7676字符的换行。判断有限小数将D DD反复除以2 22和5 55若最终变为1 11则小数有限。有限情况下模拟除法直接逐位输出直到余数为0 00无需括号。无限循环小数处理模拟长除法每次n (n % d) * 10商digit n / d保存到数组a用bk[n]记录当前商的位置z。若某个n已经记录过说明循环开始循环节起点flag bk[n]。输出时在位置flag前输出(然后依次输出a[1..z]最后补)。其间通过v累计字符数每76 7676个字符输出一次换行。注意整数部分和小数点也计入总长度开头输出q.时已累加相应字符数。3. 复杂度分析时间复杂度每位小数一次除法最长循环节不超过D DD余数最多D DD种D ≤ 10 5 D \le 10^5D≤105总时间O ( D ) O(D)O(D)非常快。空间复杂度O ( D ) O(D)O(D)用于记录余数首次出现位置的数组10 5 10^5105规模完全可行。总结模拟手动长除法的过程利用余数判重找到循环节。有限小数直接输出无限小数精确标记循环起止并添加括号。特别需要注意输出格式每行不超过76 7676个字符。代码简要说明读入与整数部分输出用scanf读取N , D N, DN,Dprintf输出整数部分和小数点并初始化字符计数v。有限小数判断提取D DD中所有2 22和5 55因子若剩余为1 11则进入有限分支直接逐位输出。无限循环小数记录初始化bk数组全0 00z记录已存小数位数。当bk[(n % d) * 10]为空时计算商存入a[z]标记bk[当前被除数] z。一旦发现重复记录循环起点flag。格式化输出遍历i从1 11到z在i flag时输出(并更新计数v。每输出一个数字检查(i v) % 76 0则换行。最后输出)并换行。代码内容#includebits/stdc.husingnamespacestd;#defineendl\ntypedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvvt;typedefpairll,llpll;constll N1e310;constll INF1e18;constll M1e610;constll mod1e97;ll n,d,z0,flag,v,a[110000],bk[1100000];intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);scanf(%lld%lld,n,d);printf(%lld.,n/d);if(n%d0){printf(0);return0;}ll td;while(t%50)t/5;while(t%20)t/2;if(t1){while(n%d!0){n(n%d)*10;printf(%lld,n/d);}}else{ll qn/d;v;if(!q)v;while(q){q/10;v;}while(!bk[(n%d)*10]){n(n%d)*10;a[z]n/d;bk[n]z;}flagbk[(n%d)*10];for(ll i1;iz;i){if(iflag){printf(();v;}printf(%lld,a[i]);if((iv)%760)printf(\n);}printf()\n);}return0;}

相关新闻

41-DataviewJS-JavaScript高级查询

41-DataviewJS-JavaScript高级查询

2026/9/28 12:57:09

41 DataviewJS:JavaScript高级查询 从一个看板说起 去年夏天,前端开发者小林接手了一个内部工具项目——团队需要用Obsidian管理多个并行开发任务的进度。最初他用Dataview的DQL查询做了几个表格,但很快发现需求越来越复杂:需要根据任务状态自动变色、需要点击按钮快速变…

learn-rust-101项目实战:从零构建你的第一个Rust应用

learn-rust-101项目实战:从零构建你的第一个Rust应用

2026/9/2 7:15:39

learn-rust-101项目实战:从零构建你的第一个Rust应用 【免费下载链接】learn-rust-101 A guide to aid you in your journey of becoming a Rustacean (Rust developer). 项目地址: https://gitcode.com/gh_mirrors/le/learn-rust-101 learn-rust-101是一个…

Multichain Auditor核心功能解析:为什么它是跨链审计必备工具?

Multichain Auditor核心功能解析:为什么它是跨链审计必备工具?

2026/9/2 11:53:17

Multichain Auditor核心功能解析:为什么它是跨链审计必备工具? 【免费下载链接】multichain-auditor Observations and tips checklist for auditing protocols on multiple chains 🧐 项目地址: https://gitcode.com/gh_mirrors/mu/multic…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…