nyoj 111 分数加减法

来源:互联网 发布:财务报销流程软件 编辑:程序博客网 时间:2024/06/07 02:45
#include<stdio.h>#include<string.h>#include<math.h>//寻找x,y的最大公约数 int change(int x, int y){int a;if(x > y) {a = x;x = y;y = a;}int z;if(x == y) return x;else{for(int i = 1; i <= x; i++){if(x % i == 0 && y%i== 0){z = i;}}return z;}}int main(){char str[10];int c, a, b, ys;while(scanf("%s", str) != EOF){getchar();int x = str[2]-'0';int y = str[6]-'0';int maxx = x*y; //分母通分,因为最后结果还要约分,所以这时不必求出最小公倍数//直接用最大公倍数即可 a = (str[0]-'0')*y; //第一个数的分子 b = (str[4]-'0')*x;  //第二个数的分子 if(str[3] == '+'){c = a+b;if(c%(x*y) == 0) printf("%d\n", c/(x*y));else{ys = change(c, x*y);printf("%d/%d\n", c/ys, x*y/ys);}}else{c = a-b;if(c%(x*y) == 0) printf("%d\n", c/(x*y));else{ys = change(fabs(c), x*y);printf("%d/%d\n",c/ys, x*y/ys);}}}return 0;} 

分数加减法

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述
编写一个C程序,实现两个分数的加减法
输入
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。

数据以EOF结束
输入数据保证合法
输出
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
1/8+3/81/4-1/21/3-1/3
样例输出
1/2-1/40