我的做法是,直接通分,首先不管有无公因子,也就是把a/b(opt)c/d化成(a*d(opt)c*b)/b*d;然后再分子分母约分就OK了,一开始考虑错了范围,Wa了几次,代码如下:

code
1
#include <stdio.h>
2
#include <string.h>
3
#include <stdlib.h>
4
#include <math.h>
5
6
int gdb(int a,int b)
7

{
8
int tmp,ret;
9
if(a < b)
10
{
11
tmp = a;
12
a = b;
13
b =tmp;
14
}
15
while(b)
16
{
17
tmp = a;
18
a = b;
19
b = tmp%b;
20
}
21
ret = a;
22
return ret;
23
}
24
int main(void)
25

{
26
int a,b,c,d;
27
char opt;
28
int ans_a,ans_b;
29
while(EOF != scanf("%d/%d%c%d/%d",&a,&b,&opt,&c,&d))
30
{
31
if('+' == opt)
32
{
33
ans_b = b*d;
34
ans_a = a*d+b*c;
35
a = gdb(ans_a,ans_b);
36
ans_a /= a;
37
ans_b /= a;
38
}
39
else
40
{
41
ans_b = b*d;
42
ans_a = a*d-b*c;
43
if(ans_a < 0)
44
{
45
a = gdb(-ans_a,ans_b);
46
}
47
else
48
{
49
a = gdb(ans_a,ans_b);
50
}
51
ans_a /= a;
52
ans_b /= a;
53
}
54
if(0 == ans_a)
55
printf("0\n");
56
else
57
{
58
if(ans_a%ans_b == 0)
59
printf("%d\n",ans_a/ans_b);
60
else
61
printf("%d/%d\n",ans_a,ans_b);
62
}
63
64
}
65
return 0;
66
}
67