14409 化简分数---gcd+化简公式

化简分数

https://ac.nowcoder.com/acm/problem/14409

题目描述
给出两个分数,求他们的和,化简为最简式。

输入描述:
第1行输入一个整数T,表示有T组测试数据。
第2-T+1行,每行输入4个正整数a,b,c,d,表示两个分数a/b和c/d。
数据保证:0<T≤1000,0<a,b,c,d≤1000。
输出描述:
对于每组测试数据,输出两个整数e和f,表示a/b + c/d的最简化结果是e/f,每组输出占一行。
示例1
输入
复制
2
1 2 1 3
4 3 2 3
输出
复制
5 6
2 1
题解:
首先我们可以先化简公式,a/b+c/d=(ad+bc)/(bd),也就是题目所说的e=ad+bc,f=bd;
但是题目说了要化成最简,所以我们要求出目前e和f的最小公倍数,然后e和f分别除最大公约数所得的就是答案。
代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cctype>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
#define ll long long
#define LL unsigned long long
int dx[4]= {0,1,0,-1},dy[4]= {1,0,-1,0};
int read()
{
    int ans=0,sign=1;
    char ch;
    ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')
            sign=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        ans=(ans<<1)+(ans<<3)+(ch^48);
        ch=getchar();
    }
    return sign*ans;
}
int gcd(int x,int y)
{
    return y==0?x:gcd(y,x%y);
}
/*inline double f(double x)//原函数
{
    double c,d,a,b,L,R;
    return (c*x+d)/(a*x+b);
}
inline double simpson(double l,double r)//辛普森公式
{
    double c,d,a,b,L,R;
    double mid=(l+r)/2;
    return (r-l)*(f(l)+f(r)+4*f(mid))/6.0;
}
double ask(double l,double r,double eps,double V)//自适应精度调节
{
    //该函数的意思是,不断二分区间,使得该区间的辛普森积分(V)与二分后所得的辛普森基分和的值的差小于等于精度;
    //上面句子的意思,可以简单换成,左区间的辛普森值+右区间的辛普森值==该整个区间的辛普森值得和
    double mid=(l+r)/2;
    double VL=simpson(l,mid),VR=simpson(mid,r);
    if(abs(VL+VR-V)<=eps)
        return VL+VR;
    else
        return ask(l,mid,eps/2,VL)+ask(mid,r,eps/2,VR);//因为区间不断二分,所以精度也要变高。
}*/
ll quickpower(ll x,ll y)
{
    ll ans=1,cnt=x;
    while(y)
    {
        if(y&1)
        {
            ans*=cnt;
        }
        cnt*=cnt;
        y>>=1;
    }
    return ans;
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        int e=a*d+b*c;
        int f=b*d;
        int g=gcd(e,f);
        e=e/g;
        f=f/g;
        cout<<e<<" "<<f<<'\n';
    }
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务