描述
编写一个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 "); 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 ",fenzi/fenmu); 40 41 else //不整除时以分数的形式输出 42 printf("%d/%d ",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 }