描述
编写一个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
-
这道题就是纯粹的数学问题,掌握好对最小公倍数、最大公约数的应用就可以了,
-
不过对于输出要注意几点,结果为负数输出负号,以及结果为一分之几时的输出
#include<stdio.h> int fun(int n,int m) { int t,l; if(n<m) { l=n; n=m; m=l; } while(m) { t=n%m; n=m; m=t; } return n; //最大公约 } int main() { int x1,x2,y1,y2; char a,b,c; while(~scanf("%d%c%d%c%d%c%d",&x1,&b,&y1,&a,&x2,&c,&y2)) { int n,m,t,k,y; y=fun(y1,y2); n=y1*y2/y;//n为分母 if(a=='+') m=n/y1*x1+n/y2*x2;//m为分子 else m=n/y1*x1-n/y2*x2; if(m<0) { printf("-"); m=-m; } if(m==0) { printf("0\n"); continue; } k=fun(n,m);//分子分母最大公约数 int f=m/k; int g=n/k; if(g==1) printf("%d\n",f); else printf("%d/%d\n",f,g); } return 0; }