分数加减法
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
- 编写一个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 #include int c; int bei(int m1,int m2){ int t,r,p=m1*m2; if(m1 { t=m2; m2=m1; m1=t; } while(m2!=0){ r=m1%m2; m1=m2; m2=r; } c=m1;//最大公约数 return p/m1;//最小公倍数 } int main(){ int z1,m1,z2,m2,z3,m3,a; char op; while(scanf("%d",&z1)!=EOF){ scanf("/%d%c%d/%d",&m1,&op,&z2,&m2); if(m1==0||m3==0){//nyoj要求,分母为0,结果为一,气煞我也 printf("1\n"); continue; } a=bei(m1,m2); switch(op){//化简程序 case '+': z3=a/m1*z1+a/m2*z2; m3=a; break; case '-': z3=a/m1*z1-a/m2*z2; m3=a; break; } bei(((int)fabs(z3)),m3);//调用求出最小公约数 if(z3%m3==0) printf("%d\n",z3/m3);//结果化简 else printf("%d/%d\n",z3/c,m3/c); } return 0; }
-
输入包含多行数据