Description
编写一个C程序,实现两个分数的加减法
Input
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+“或者”-"。
数据以EOF结束
输入数据保证合法
Output
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
Sample
Input
1/8+3/8
1/4-1/2
1/3-1/3
Output
1/2
-1/4
0
import java.util.*;
class MATH {
String str;
public MATH(String str) {
super();
this.str = str;
}
public void split() {
int x1 = str.charAt(0)-'0';
int y1 = str.charAt(2)-'0';
int x2 = str.charAt(4)-'0';
int y2 = str.charAt(6)-'0';
//求分母的最小公倍数
int Y = y1*y2/gcd(y1,y2);
//转化分子
x1 = x1*Y/y1;
x2 = x2*Y/y2;
//计算分子
int X = Switch(str.charAt(3),x1,x2);
//求分母和分子最小公约数
int yue = gcd(Math.abs(X),Y);
X = X/yue;
Y = Y/yue;
if(X == 0)
System.out.println(0);
else if(Y != 1)
System.out.println(X+"/"+Y);
else
System.out.println(X);
}
//辗转相除求最大公因数
public int gcd(int x,int y) {
if(x<y) {
int t = x;
x = y;
y = t;
}
if(y == 0)
return x;
else
return gcd(y,x%y);
}
public int Switch(char ch,int x,int y) {
int X = 0;
switch(ch) {
case '+':{
X = x+y;
break;
}
case '-':{
X = x-y;
break;
}
}
return X;
}
}
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
MATH math;
while(input.hasNext()) {
math = new MATH(input.next());
math.split();
}
input.close();
}
}