好了,正题开始。

题目传送门

首先我们要明白分数的加法规律(小学知识)

通分!!!

通分!!!

通分!!!

在通分后,分母变成两个原分数分母的积,原分数分子互相乘以另一个原分数的分母,并相加成为新的分子。也就是说:

a/b + c/d = (ad+bc)/(bd)

原理自己找。

那么,分数加法宣告解决。

但是!!!

题目要求输出的是最简分数

最简分数!!!

所以我们还要约分

约分的方法:

兄弟们直接上代码!!!

e=a*d+b*c;							//计算分子
f=b*d;								//计算分母
for(int i=2;i<max(e,f);i++)			//遍历公因数,记得从2开始,不然会死循环
{
	if((e%i==0)&&(f%i==0))			//是否符合公因数的条件
	{
		e/=i;						//约分分子
		f/=i;						//约分分母
		i--;						//将测试公因数-1(注意,这是精髓)
	}
}

这是代码的中心部分,其他的部分自己套。 接下来是全部代码(C++):

using namespace std;
int main()
{
    int a,b,c,d,e[1000]={},f[1000]={};				//老规矩,初始化
    int n;
    cin>>n;											//老规矩,输入次数
    for(int i=0;i<n;i++)							//执行n次操作
    {
        cin>>a>>b>>c>>d;							//老规矩,输入ABCD
        e[i]=a*d+c*b;								//前面讲了
        f[i]=b*d;
        for(int j=2;j<=max(e[i],f[i]);j++)
        {
            if((e[i]%j==0)&&(f[i]%j==0))
            {
                e[i]/=j;
                f[i]/=j;
                j--;
            }
        }
        cout<<e[i]<<' '<<f[i]<<endl;				//老规矩,输出
    }
    return 0;										//完美结束
}

好了,本题解已结束。