NC220559. 连分数
描述
输入描述
首行一个正整数 ,代表测试数据的组数
接下来 行每行给出两个正整数
保证输入的分数都可以写成有穷连分数的形式
输出描述
每组测试数据输出一行,格式见样例
示例1
输入:
3 103 24 21 73 4 2
输出:
103/24 = 4+1/{3+1/{2+1/3}} 21/73 = 0+1/{3+1/{2+1/10}} 4/2 = 2
pypy3(pypy3.6.1) 解法, 执行用时: 56ms, 内存消耗: 20612K, 提交时间: 2021-04-17 22:19:24
t = int(input()) import math def so(p,q): if p%q == 0: return str(p//q) else: a = math.floor(p/q) if q%(p%q) == 0: return '%d'%a + '+1/' + '%d'%(math.floor(q/(p%q))) else: return '%d'%a + '+1/' + '{' + so(q, p%q) + '}' for i in range(t): p,q = list(map(int, input().split())) print(str(p) + '/' + str(q) + ' = ' + so(p, q))
C++(clang++11) 解法, 执行用时: 2ms, 内存消耗: 352K, 提交时间: 2021-04-17 19:44:05
#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; while(n--) { int num=0; int a,b; cin>>a>>b; cout<<a<<'/'<<b<<" = "; cout<<a/b; while(a%b!=0) { num++; int x=a,y=b; a=y; b=x%y; if(a%b!=0) cout<<"+1/{"<<a/b; else cout<<"+1/"<<a/b,num--; } for(int i=1;i<=num;i++) { cout<<'}'; } cout<<endl; } }
Python3(3.9) 解法, 执行用时: 18ms, 内存消耗: 2808K, 提交时间: 2021-05-07 14:51:31
t = int(input()) def g(p, q): if p % q == 0: return str(int(p / q)) else: temp = g(q, p % q) if q % (p%q) != 0: temp = "{" + temp + "}" return str(int(p / q)) + "+1/" + temp for i in range(t): p, q = map(int, input().split()) print("%d/%d = %s" % (p, q, g(p, q)))