XTU 1329 连分式

题目描述

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

XTU 1329 连分式

输入

第一行是一个整数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;
}

上一篇:阿里云 Aliplayer高级功能介绍(六):进度条标记


下一篇:读写文件的锁实例