2480: 分数求和


Time Limit: 1 Sec   Memory Limit: 128 MB

Submit: 320  

Solved: 52

[

​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 时只需要输出分子。


有点坑的一道题,由于一个小问题交了好多次,就是测试不出哪出问题了,最后终于发现是IF语句的问题。


#include <stdio.h>
#include <stdlib.h>
int gcd(int x,int y)
{
int r;
while(y>0)
{
r=x%y;
x=y;
y=r;
}
return x;
}
int lcm(int x,int y)
{
return x*y/gcd(x,y);
}
int main()
{
int a,b,c,d;
while(~scanf("%d %d %d %d",&a,&b,&c,&d))
{
if(b==0||d==0)
continue;
int q,w;
w=lcm(b,d);
q=a*(w/b)+c*(w/d);
int e=gcd(w,q);
if(w==1)
printf("%d\n",q);
else if(q%w==0)
printf("%d\n",q/w);
else
printf("%d/%d\n",q/e,w/e);
}
return 0;
}

一定要特别注意细节和格式,小细节可以毁掉一个程序。