Problem Description
编写程序,实现两个分数的加减法
Input
输入包含多行数据;
每行数据是一个字符串,格式是"a/boc/d",其中a, b, c, d为数字(每个数字保证为正数并且不存在正号)。o是运算符"+“或者”-","*",""。
数据以EOF结束,输入数据保证合法。
Output
直接输出结果,并且注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数形式。
Sample Input
1/100+3/100
1/4-1/2
1/3-1/3
1/2*2/1
1/2\1/2
Sample Output
1/25
-1/4
0
1
1
Hint
Source
import java.util.Scanner;
class Op{
int a, b, c ,d;
char ch;
int up_data, down_data;
Op(int a, int b, int c, int d, char ch){
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.ch = ch;
Operation();
Approximate();
}
public void Operation(){
if (ch == '+'){
down_data = b*d;
up_data = a*d + c*b;
}
else if (ch == '-'){
down_data = b*d;
up_data = a*d - c*b;
}
else if (ch == '*'){
up_data = a*c;
down_data = b*d;
}
else{
up_data = a*d;
down_data = b*c;
}
}
public void Approximate(){ // 约分即除以最小公倍数
int m, n;
int flag = 0;
if (up_data < 0||down_data < 0){
flag = 1;
up_data = Math.abs(up_data);
down_data = Math.abs(down_data);
}
if (up_data > down_data){
m = up_data;
n = down_data;
}
else{
m = down_data;
n = up_data;
}
while(n > 0){
int temp = m%n;
m = n;
n = temp;
}
up_data /= m;
down_data /= m;
if (flag == 1){
up_data = -up_data;
}
}
}
class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine();
char ch = '0';
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '+'){
ch = '+';
}
else if (str.charAt(i) == '-'){
ch = '-';
}
else if (str.charAt(i) == '*'){
ch = '*';
}
else if (str.charAt(i) == '\\'){
ch = '\\';
}
}
String[] num = str.split("/|-|\\+|\\*|\\\\"); // 转义字符的分割;多个分割符分割
int a = Integer.parseInt(num[0]);
int b = Integer.parseInt(num[1]);
int c = Integer.parseInt(num[2]);
int d = Integer.parseInt(num[3]);
Op nb = new Op(a,b,c,d,ch);
if (nb.up_data == 0){
System.out.println(0);
}
else if (nb.up_data == nb.down_data){
System.out.println(1);
}
else{
System.out.println(nb.up_data+"/"+nb.down_data);
}
}
}
}