列表

详情


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)))

上一题