试题 历届真题 循环小数【第十一届】【决赛】【Python】
创始人
2025-05-29 19:36:38

试题 历届真题 循环小数【第十一届】【决赛】【Python】

题目来源:第十一届蓝桥杯决赛
http://lx.lanqiao.cn/problem.page?gpid=T2891

资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

【问题描述】
已知S是一个小于1的循环小数,请计算与S相等的最简真分数是多少。
例如 0.333··· 等于131\over{3}31​ , 0.1666··· 等于161\over 661​。

【输入格式】
输入第一行包括两个整数 ppp 和 qqq ,表示 SSS 的循环节是小数点后第 ppp 位到第 qqq 位。
第二行包含一个 qqq 位数,代表 SSS 的小数部位前 qqq 位。

【输出格式】
输出两个整数,用一个空格隔开,分别表示答案的分子和分母。

【样例输入】
1 6
142857
【样例输出】
1 7

解题

循环小数 [源于百度]

循环小数(circulating decimal),是指一个数的小数部分从某一位起,一个或几个数字依次重复出现的无限小数。
循环小数会有循环节(循环点),并且可以化为分数。

循环小数转分数 [源于百度]

纯循环小数
将纯循环小数改写成分数,分子是一个循环节的数字组成的数;分母各位数字都是9,9的个数与循环节中的数字的个数相同.
例如:0.111…=1/9、0.12341234…=1234/9999

混循环
将混循环小数改写成分数,分子是不循环部分与第一个循环节连成的数字组成的数,减去不循环部分数字组成的数之差;分母的头几位数字是9,末几位数字是0,9的个数跟循环节的数位相同,0的个数跟不循环部分的数位相同.
例如:0.1234234234…=(1234-1)/9990 0.55889888988898…=(558898-55)/999900

代码

import fractionsp,q = map(int,input().split()) # 第p位到第q位是循环节
num = input() # 小数部分(小数点后一位到第一个循环节最后一位)
repeat_len = q-p+1 # 循环节的位数
num_len = len(num) # 小数部分的长度 = 非循环部分长度+一个循环节长度(repeat_len)
num = int(num) # input()输入的数据,默认以str类型接收
numerator,denominator=1,1 # 分子,分母if repeat_len == num_len: # 纯循环小数(循环从第1位开始)# 分子是一个循环节的数字组成的数numerator = num # 分母各位数字都是9,9的个数与循环节中的数字的个数相同denominator = 10**num_len-1 
else: # 混循环小数# 分子是非循环部分与第一个循环节连成的数字组成的数,减去非循环部分数字组成的数之差numerator = num - num // (10**(repeat_len)) # 分母的头几位数字是9,末几位数字是0,9的个数跟循环节的数位相同,0的个数跟不循环部分的数位相同.denominator = (10**repeat_len-1) * (10**(p-1)) # Fraction(arg1,arg2)可以将将arg1/arg2化简为最简分数的形式
print(*str(fractions.Fraction(numerator,denominator)).split('/')) # split('/')是根据字符串中的'/'将字符串分隔开
# *:解包,将list中的元素按元素输出,输出就不会带 "[" , "]"和","

总结

1、最关键是知道循环小数转分数的规则。如果不知道这个规则,基本解不出来。
2、使用fractions里的Fraction()将分数为最简分数形式。当然可以用辗转相除法,但使用python应该学会使用一些包(蓝桥杯可以使用的,笔者在蓝桥杯练习系统中可以使用),不然用python的优势就体现不出。

相关内容

热门资讯

科力尔:全资孙公司终止与瑞业数... 新京报贝壳财经讯 12月21日,科力尔公告称,由于客观原因导致合伙企业基金设立条件发生变化,且受市场...
保畅通、护生产 各地以“雪”为...   央视网消息:受冷空气影响,从12月18日开始,内蒙古额尔古纳市迎来降雪过程,给交通出行和农牧业生...
视频丨观天象 授农时 解锁古人...   又是一年冬至时,回望千年岁月,古人观天地的智慧与御寒取暖的巧思,在今天依然熠熠生辉。走进山西,解...
观想科技:筹划购买辽晶电子不低... 新京报贝壳财经讯 12月21日,观想科技公告称,公司正在筹划发行股份购买锦州辽晶电子科技股份有限公司...
联创电子:筹划控制权变更 股票... 新京报贝壳财经讯 12月21日,联创电子公告称,因公司控股股东江西鑫盛投资有限公司筹划协议转让部分股...