栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数

2020年第十一届蓝桥杯 - 国赛 - Java研究生组 - F.循环小数

在线评测 Ideas

对于一个纯循环小数,假设循环节为l,则小数为0.llll…,转换为分数就是 l / (10 ** n - 1),其中n为循环节L的长度。

也就是说,我们要找到一个真分数 x / y,等于 l / (10 ** n - 1),即x = l,y = 10 ** n - 1。

对于混合循环小数,可以把循环体和非循环体拆开,即设循环体为l,非循环体为k,则小数为0.klll…,我们可以把它拆成两部分:0.k + 0.l / (10 ** m),其中 m 为非循环体 k 的长度。

转换成分数就是 k / (10 ** m) + l / (10 ** n - 1) / (10 ** m) = (k + l / (10 ** n - 1)) / (10 ** m) = (k * (10 ** n - 1) + l) / ((10 ** n - 1) * (10 ** m))。

所以 x = (k * (10 ** n - 1) + l),y = ((10 ** n - 1) * (10 ** m))。

最后,我们要求的是最简真分数,所以还需要求一下 x 和 y 的最大公约数,让 x 和 y 再除一下。

Code Python
def gcd(a, b):
	return a if b == 0 else gcd(b, a % b)


if __name__ == '__main__':
	p, q = map(int, input().split())
	num = int(input())
	m, n = p - 1, q - p + 1
	k = int(num / (10 ** n))
	l = int(num % (10 ** n))
	x, y = k * (10 ** n - 1) + l, (10 ** n - 1) * (10 ** m)
	g = gcd(x, y)
	x, y = x / g, y / g
	print(f"{int(x)} {int(y)}")
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/775023.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号