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
",s2/s1);
			 }else
			 {
			 	printf("%lld/%lld
",s2,s1);
			 }
		}	
   		
	
}
原文地址:https://www.cnblogs.com/YenKoc/p/12779926.html