百度:
比如一个卫星的周期为3圈每天,另一个为4圈每天,相遇周期就为12圈每天。
此题就是求两个分数的最小公倍数;
设输入a1/b1,a2/b2;设最小公倍数为a3/b3;
通过运算可以得出a3需要为a1,a2最小公倍数,b3需要为b1,b2最大公约数
运算过程中别忘了化简,否则可能溢出;
最后输出的时候可以先化简然后判断判断b3是否为1然后输出,也可以直接判断能否整除然后输出;
#include <cstdio>
#include <iostream>
using namespace std;
int n;
long long a1,b1;
long long a2,b2;
long long a3,b3;
long long gongyue(long long a,long long b)
{
if(b == 0)
return a;
else
{
return gongyue(b,a%b);
}
}
long long gongbei(long long a,long long b)
{
return a*b/(gongyue(a,b));
}
int main()
{
cin >> n;
while (n--)
{
scanf("%lld/%lld",&a1,&b1);
scanf("%lld/%lld",&a2,&b2);
long long c = gongyue(a1,b1);
a1/=c;
b1/=c;
c = gongyue(a2,b2);
a2/=c;
b2/=c;
a3 = gongbei(a1,a2);
b3 = gongyue(b1,b2);
if(a3%b3 == 0)
{
printf("%lld\n",a3/b3);
}
else
{
printf("%lld/%lld\n",a3,b3);
}
}
return 0;
}
一开始出错了,显示除0错误,后来把所有int改为long long,并且简化输出结果才过。。。