XTU 1329 连分式

题目描述

连分式是形如下面的分式,已知a,b和迭代的次数n,求连分式的值。

输入

第一行是一个整数T(1≤T≤1000),表示样例的个数。 每行一个样例,为a,b,n(1≤a,b,n≤9)

输出

每行输出一个样例的结果,使用x/y分式表达,并保证x,y互质。

样例输入

3
1 2 1
1 2 9
5 9 9

样例输出

1/2
985/2378
321047030/611590599

思路:直接模拟,并且随时算分子与分母的最大公因数和最小公倍数,这种题目数据大得离谱,一定要用64位,另外,第一个分数就是a/b。

AC代码:

#include <stdio.h>
#include <stdlib.h>

__int64 f(__int64 a,__int64 b)//求最大公因数
{
    while(a%b!=0)
    {
        __int64 c=b;
        b=a%b;
        a=c;
    }
    return b;
}
int main()
{
    int k;
    scanf("%d",&k);
    while(k--)
    {
        __int64 a,b,n,i;
        scanf("%I64d%I64d%I64d",&a,&b,&n);
        if(n==1)
        {
            __int64 c,d;
            c=a;
            d=b;
            a=a/f(c,d);
            b=b/f(c,d);
            printf("%I64d/%I64d\n",a,b);
            continue;
        }
        __int64 c=a,d=b;
        a=a/f(c,d),b=b/f(c,d);
        for(i=1;i<n;i++)//随时化简分子与分母
        {
            a=d*b+a;
            __int64 t=a;
            a=b;
            b=t;
            a=a*c;
            __int64 s1,s2;
            s1=a;
            s2=b;
            b=b/f(s1,s2);
            a=a/f(s1,s2);
        }
        printf("%I64d/%I64d\n",a,b);
    }
    return 0;
}

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值