其实,说得简单明了的一点,就是求俩个分数的最小公倍数;
方法:先将俩个分数转换成最简形式,在求出俩个分母的最大公约数最为最小公倍数的分母,求出俩个分子的最小公倍数做为最小公倍数的分子即可;
当我把我的代码改得面目全非的时候,我才发现了我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; }