nyoj_111_分数加减法_201311281341

分数加减法

时间限制: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
来源
水题比赛
上传者
hzyqazasdf
 1 #include <stdio.h>
 2 
 3 int gcd(int a,int b)
 4 {
 5     int i,t;
 6     if(a>b)
 7     {
 8         t=a;a=b;b=t;
 9     }
10     while(a)
11     {
12         i=a;
13         a=b%a;
14         b=i;
15     }
16     return b;
17 }
18 
19 int main()
20 {
21     char s[10];
22     while(gets(s))
23     {
24         int i;
25         int a,b1,b2;
26         int t1,t2;
27         //printf("%d\n",gcd(6,4));
28         a=(s[2]-'0')*(s[6]-'0')/gcd((s[2]-'0'),(s[6]-'0'));
29         b1=a/(s[2]-'0')*(s[0]-'0');
30         b2=a/(s[6]-'0')*(s[4]-'0');
31         if(s[3]=='-'){
32         if(b1<b2)
33         {
34             t1=b2-b1;
35             t2=gcd(t1,a);
36             if(t1==0)
37             printf("%d\n",0);
38             else
39             {
40                 printf("-");
41                 printf("%d/%d\n",t1/t2,a/t2); 
42             }           
43         }
44         else
45         {
46             t1=b1-b2;
47             t2=gcd(t1,a);
48             if(t1==0)
49             printf("%d\n",0);
50             else
51             printf("%d/%d\n",t1/t2,a/t2); 
52         }
53     }
54     else
55     {
56         t1=b2+b1;
57         t2=gcd(t1,a);
58         if(t1%a==0)
59         printf("%d\n",t1/a);
60         else
61         printf("%d/%d\n",t1/t2,a/t2);       
62     }
63     }
64     return 0;
65 }

 

简单题

posted @ 2013-11-28 15:36  龙腾四海365  阅读(200)  评论(0编辑  收藏  举报