分数加减法

描述

编写一个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 #include <stdio.h> 
 2 
 3 int gcd(int a,int b);
 4 
 5 int main(){
 6     int a;
 7     int b;
 8     int c;
 9     int d;
10     char sign;
11     int fenmu;
12     int fenzi;
13     char temp;
14     
15     while(scanf("%d/%d%c%d/%d",&a,&b,&sign,&c,&d)!=EOF){
16         fenmu=b*d/gcd(b,d);
17         
18         if(sign=='+')
19             fenzi=a*fenmu/b+c*fenmu/d;
20         
21         else
22             fenzi=a*fenmu/b-c*fenmu/d;
23             
24         if(fenzi==0){  //分子为0直接输出0 
25             printf("0\n");
26             continue;
27         }
28         
29         temp='+';
30         if(fenzi<0){  //当为负数时,化为正数,标记负号 
31             fenzi=-fenzi;
32             temp='-';
33         }
34         
35         if(temp=='-')  //有负号时输出负号 
36             printf("-");
37         
38         if(fenzi%fenmu==0)  //如果整除时直接输出商 
39             printf("%d\n",fenzi/fenmu);
40             
41         else   //不整除时以分数的形式输出 
42             printf("%d/%d\n",fenzi/gcd(fenmu,fenzi),fenmu/gcd(fenmu,fenzi));
43     }
44     return 0;
45 }
46 
47 int gcd(int a,int b){
48     int temp;
49     
50     if(a<b){
51         temp=a;
52         a=b;
53         b=temp;
54     }
55     
56     while(a%b!=0){
57         temp=a%b;
58         a=b;
59         b=temp;
60     }
61     
62     return b;
63 }

 

posted @ 2014-11-14 16:37  zqxLonely  阅读(408)  评论(0编辑  收藏  举报