Problem F: 分数求和
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 270 Solved: 34
[ Submit][ Status][ Web Board]
Description
求两分数相加,输出结果。
Input
题目有多组测试数据,直到文件尾。
每组测试数据需要输入4个整数:
nume1, deno1为第一个数的分子和分母,
nume2, deno2为第二个数的分子和分母。
Output
两分数相加的结果。每个测试数据占一行。
输出格式为“nume3/deno3”,该格式对结果为整数的情况除外。
分母为0的情况不考虑。
Sample Input
1 3 1 2 3 25 4 15 1 4 3 4 1 4 1 4
Sample Output
5/6 29/75 1 1/2
HINT
求最大公约数并约分,并注意分母为 1 时只需要输出分子。
#include <iostream>
using namespace std;
int main ()
{
int m,n,k,t,h,l,sum1,sum2,min;
int max(int ,int ); //定义一个求最大公约数的函数
while( cin>>m>>n>>k>>t) //...
{
h=max(n,t); //求最大公约数h
min=(n*t)/h; //求最小公倍数min
sum1=m*(min/n)+k*(min/t);
sum2=min;
l=max(sum1,sum2);//判断分子,分母的最大公约数是不是1
if(sum2==1)
cout<<sum1<<endl;
else if(sum1%sum2==0)
cout<<sum1/sum2<<endl;
else
{
sum1=sum1/l;
sum2=sum2/l;
cout<<sum1<<'/'<<sum2<<endl;
}
}
return 0;
}
int max(int v,int u)
{
int t,r;
if(v>u)
{
t=u;u=v;v=t;
}
while((r=u%v)!=0)
{
u=v;v=r;
}
return (v);
}