hdu1713

来源:互联网 发布:帝国cms 7.2 编辑:程序博客网 时间:2024/05/17 09:03

百度:

比如一个卫星的周期为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,并且简化输出结果才过。。。


0 0