NYOJ 111 分数加减法

分数加减法

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述
编写一个C程序,实现两个分数的加减法
输入
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。

数据以EOF结束
输入数据保证合法
输出
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
1/8+3/8
1/4-1/2
1/3-1/3
样例输出
1/2
-1/4
0
 1  
 2 #include<cstdio>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<string.h>
 6 #define swap(a,b) {temp=a;a=b;b=temp;}
 7 int a,b,c,d,temp;
 8 int gotit(int a,int b)
 9 {
10     if(a<b)
11         swap(a,b);
12     while(b)
13     {
14         temp=b;
15         b=a%b;
16         a=temp;
17     }
18     return a;
19 }
20 void yuris()
21 {
22     int s=gotit(c,d);
23     if(s==1)
24         return;
25     c/=s;
26     d/=s;
27     if(d<0)
28     {
29         c=-c;
30         d=-d;
31     }
32 }
33 int main()
34 {
35     char fuhao;
36     while(~scanf("%d/%d%c%d/%d",&a,&b,&fuhao,&c,&d))
37     {
38         if(b!=d)
39         {
40             temp=b;
41             b=b*d;
42             a=a*d;
43             d=d*temp;
44             c=c*temp;
45         }
46         if(fuhao=='+')
47             c=a+c;
48         else
49             c=a-c;
50         if(c==0)
51             printf("0
");
52         else
53         {
54             yuris();
55             if(d!=1)
56                 printf("%d/%d
",c,d);
57             else
58                 printf("%d
",c);
59         }
60     }
61     return 0;
62 }
63         
原文地址:https://www.cnblogs.com/caterpillarofharvard/p/4230463.html