连分式
题目描述
连分式是形如下面的分式,已知a,b和迭代的次数n,求连分式的值。
ab+ab+ab+⋯
输入
第一行是一个整数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
思路:找到每次递推的关系式,用循环去解决就好了。嘿嘿,这题与后面的一题很像,写完这个可以去看看那个题。
#include<stdio.h>
long long int gcd(long long int a,long long int b)//求最大公约数
{
if(a%b==0)
{
return b;
}
a%=b;
return gcd(b,a);
}
int main()
{
int T,i,a,b,n;
long long int t,fz,fm,r;
scanf("%d",&T);
while(T--)
{
scanf("%d %d %d",&a,&b,&n);
fz=a;
fm=b;
long long int t1=gcd(fz,fm);
fz/=t1;
fm/=t1;
for(i=0;i<n-1;i++)//这里 n=1时是直接输出 a/b 的,也要保证互质
{
t=fz;//变化之前的分子
fz=a*fm;
fm=b*fm+t;
r=gcd(fz,fm);//这里要用一个中间量代替fz与fm的最大公约数,因为经过fz/=gcd(fz,fm)后fz的值发生了变化,这就导致fm/=gcd(fz,fm)的值发生了变化
fz/=r;
fm/=r;
}
printf("%lld/%lld\n",fz,fm);
}
return 0;
}