hdu 1713 相遇周期
思路:
这题讲道理题目有问题,周期应该是天数除以圈数吧。。。
本质的问题还是求两个周期的最小公倍数,如果换成整数,就很好写了,问题现在是分数,分数求最小公倍数的,
是分子求最小公倍数,分母求最大公约数,然后就是溢出的问题,全用long long来表示。
代码:
#include<bits/stdc++.h>
using namespace std;
//求最大公约数,辗转相除法
long long gonyue(long long a,long long b)
{
if(b==0) return a;
else return gonyue(b,a%b);
}
//求最大公倍数
long long gonbei(long long a,long long b)
{
return a*b/gonyue(a,b);
}
int main()
{
int n;
scanf("%d",&n);
long long r1,r2,t1,t2;
while(n--)
{
scanf("%lld/%lld %lld/%lld",&r1,&t1,&r2,&t2);
int x=gonyue(r1,t1);
r1/=x;
t1/=x;
x=gonyue(r2,t2);
r2/=x;
t2/=x;
//分母求最大公约
int s1=gonyue(t1,t2);
//分子求最小公倍数
int s2=gonbei(r1,r2);
if(s2%s1==0)
{
printf("%lld\n",s2/s1);
}else
{
printf("%lld/%lld\n",s2,s1);
}
}
}