#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/8 1/4-1/2 1/3-1/3
样例输出
-
1/2 -1/4 0
-
输入包含多行数据