分数加减法
时间限制: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<stdio.h> int a,b,c,d; int abs(int a) { if(a<0) return -a; else return a; } int GCD(int a,int b) //最大公约数 { int t,k=1; if(a>b) { t=a; a=b; b=t; } while(k) { k=b%a; b=a; a=k; } return b; } int LCM(int a,int b) //最小公倍数 { int m; m=GCD(a,b); return (a*b/m); } // 求b,d最小公倍数,a,c各自乘上,然后想减,最后求分子分母最大公约数化简 int main() { int m1,m2,m3; char num[10]; while(scanf("%s",num)!=EOF) { a=num[0]-48,b=num[2]-48,c=num[4]-48,d=num[6]-48; m1=LCM(b,d); if(a==0&&c==0) { printf("0\n"); continue; } if(num[3]=='-') { m2=a*(m1/b)-c*(m1/d); //分子 if(m2) { m3=GCD(abs(m2),abs(m1));//分子分母最大公约数 if(m2/m3==m1/m3) printf("1\n"); else if(m2%m1==0) printf("%d\n",m2/m1); else printf("%d/%d\n",m2/m3,m1/m3); } else printf("0\n"); } if(num[3]=='+') { m2=a*(m1/b)+c*(m1/d); m3=GCD(abs(m2),abs(m1)); if(m2/m3==m1/m3) printf("1\n"); else if(m2%m1==0) printf("%d\n",m2/m1); else printf("%d/%d\n",m2/m3,m1/m3); } } return 0; } //注意判断分子为0时,分子可以整除分母时
- 输入包含多行数据