描述
编写一个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> #include<math.h> int abs(int j) { if(j<0) return -j; return j; } int gcd(int m,int n) { return !n? m:gcd(n,m%n); } int main() { char a1,b1,c1,d1;char t;int a,b,c,d; while(scanf("%c/%c%c%c/%c",&a1,&b1,&t,&c1,&d1)!=EOF) { a=a1-'0';b=b1-'0';c=c1-'0';d=d1-'0'; if(a==0 || d==0) printf("0\n");//考虑0和0.
-
if(t=='+') { int q;q=gcd((a*d+c*b),(b*d)); printf("%d/%d\n",(a*d+c*b)/q,(b*d)/q); } if(t=='-') { int q;q=gcd(abs(a*d-c*b),(b*d)); if(a*d-c*b==0) printf("0\n"); if((a*d-c*b)<0) printf("-%d/%d\n",abs(a*d-c*b)/q,(b*d)/q); if((a*d-c*b)>0) printf("%d/%d\n",(a*d-c*b)/q,(b*d)/q); } getchar(); } return 0; }