题目链接
欧几里得算法(辗转相除法)是一个较优的求连分数算法
常见的写法
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
如何用辗转相除法将分数表示为连分数?
PPT引用来源:百度文库 - PPT《连分数》源代码
#include <bits/stdc++.h>
using namespace std;
int flag=1;
void solve(int p,int q,int flag)
{
if(p%q==0) //最初即整除或者最后一步整除
{
cout<<p/q;
return;
}
if(!flag)
cout<<'{';
cout<<p/q<<"+1/";
solve(q,p%q,0);
if(!flag)
cout<<'}';
return;
}
int main()
{
int t,p,q;
cin>>t;
while(t--)
{
cin>>p>>q;
cout<<p<<'/'<<q<<" = ";
solve(p,q,flag);
cout<<endl;
}
return 0;
}