hdu 1713 相遇周期

其实,说得简单明了的一点,就是求俩个分数的最小公倍数;

方法:先将俩个分数转换成最简形式,在求出俩个分母的最大公约数最为最小公倍数的分母,求出俩个分子的最小公倍数做为最小公倍数的分子即可;

当我把我的代码改得面目全非的时候,我才发现了我WA的原因,

求最小公倍数的时候

int lcd(int u,int v,int h)
{
    return(u*v/h);//这步溢出了
}

应该改为

int lcd(int u,int v,int h)
{
    return(u/h*v);
}

#include<iostream>
using namespace std;
int n;
int hcf(int a,int b)
{
    int r=0;
    while(b!=0)
        {
        r=a%b;
        a=b;
        b=r;
        }
    return(a);
} 
int lcd(int u,int v,int h)
{
    return(u/h*v);
}
int main()
{
	int a,b,c,d;
	scanf("%d",&n);
	while(n--)
	{
			scanf("%d/%d",&a,&b);
			scanf("%d/%d",&c,&d);
			int h1=hcf(a,b);
			a/=h1;b/=h1;
			int h2=hcf(c,d);
			c/=h2;d/=h2;
			if(hcf(b,d)==1)printf("%d\n",lcd(a,c,hcf(a,c)));
			else printf("%d/%d\n",lcd(a,c,hcf(a,c)),hcf(b,d));
		}
	return 0;
}
原文地址:https://www.cnblogs.com/nanke/p/2169125.html