连分式是形如下面的分式,已知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
解题思路: 观察连分式的式子,可以知道它是以 a/ b+t 的样式迭代的,t 为上一轮的分式,迭代次数n已经告诉了,那么第一轮的t是多少呢?不妨只留下一个最上面的分号看看,是不是只剩下 a/b了,没错,迭代的第一轮,t就等于 a/b。现在解题已经非常简单了。
AC代码:
#include <stdio.h>
int gcd(int x,int y){
return y>0 ? gcd(y,x%y) : x;
}
int main()
{
int T,a,b,n,k;
scanf("%d",&T);
while ( T --)
{
int ai,bi; // ai分子,bi分母
scanf("%d %d %d",&a,&b,&n);
ai = a, bi = b; // 第一轮次ai,bi的值就等于a,b
k = gcd(ai,bi);
ai/=k, bi/=k;
for (int i = 1; i < n; i ++)
{
int p = ai;
ai = bi*a; // 通分运算
bi = bi*b + p;
k = gcd(ai,bi);
ai /= k, bi /= k;
}
printf("%d/%d\n",ai,bi);
}
return 0;
}