题目描述
连分式是形如下面的分式,已知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;
}