码迷,mamicode.com
首页 > 其他好文 > 详细

分数加减法

时间:2014-11-14 17:36:24      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   os   sp   数据   div   

描述

编写一个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 }

 

分数加减法

标签:style   blog   io   color   ar   os   sp   数据   div   

原文地址:http://www.cnblogs.com/zqxLonely/p/4097635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!