分数四则运算

分数四则运算

Time Limit: 1000 ms  Memory Limit: 65536 KiB

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
 
  
package hello;

import java.util.*;

class Fenshu {

	int fenzi;
	int fenmu;

	public Fenshu(int fenzi, int fenmu) { // 构造方法
		this.fenzi = fenzi;
		this.fenmu = fenmu;
	}

	public Fenshu() {
	}
	public Fenshu add(Fenshu Fenshu) { // 定义加法方法
		int newfenzi = fenzi * Fenshu.fenmu + fenmu * Fenshu.fenzi;
		int newfenmu = fenmu * Fenshu.fenmu;
		int gcd = gcd(newfenzi, newfenmu); // 求得最大公约数用来同分分数
		return new Fenshu(newfenzi / gcd, newfenmu / gcd);
	}

	public Fenshu sub(Fenshu Fenshu) {
		int newfenzi = fenzi * Fenshu.fenmu - fenmu * Fenshu.fenzi;
		int newfenmu = fenmu * Fenshu.fenmu;
		int gcd = gcd(newfenzi, newfenmu);
		return new Fenshu(newfenzi / gcd, newfenmu / gcd);
	}
	public Fenshu mul(Fenshu Fenshu) {
		int newfenzi = fenzi*Fenshu.fenzi;
		int newfenmu = fenmu*Fenshu.fenmu;
		int gcd = gcd(newfenzi, newfenmu);
		return new Fenshu(newfenzi/gcd, newfenmu/gcd);
	}
	public Fenshu div(Fenshu Fenshu) {
		int newfenzi = fenzi*Fenshu.fenmu;
		int newfenmu = fenmu*Fenshu.fenzi;
		int gcd = gcd(newfenzi, newfenmu);
		return new Fenshu(newfenzi/gcd, newfenmu/gcd);
	}
	public int gcd(int a, int b) { // 辗转相除求最大公约数

		int m = Math.max(Math.abs(a), Math.abs(b));
		int n = Math.min(Math.abs(a), Math.abs(b));
		int r;
		while (n != 0) {
			r = m % n;
			m = n;
			n = r;
		}
		return m;
	}
	public String toString(){   //定义输出对象的格式
		if ((fenzi % fenmu) == 0)
			return fenzi/fenmu+"";
		else
			return fenzi + "/" + fenmu;
	}
}

public class Main {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		while (in.hasNext()) {

			String str = in.next();
			char[] s = str.toCharArray();
			int center = 0;
			int flag = 0;
			int i;
			for (i = 0; i < str.length(); i++) {
				if (s[i] == '+') {
					center = i;
					flag = 1;
					break;
				} else if (s[i] == '-') {
					center = i;
					flag = 2;
					break;
				}else if(s[i] == '*') {
					center = i;
					flag = 3;
					break;
				}else if(s[i] == '\\') {
					center = i;
					flag = 4;
					break;
				}
			}

			String s1 = str.substring(0, center); // 截取字符串
			String s2 = str.substring(center + 1, str.length());
			String[] p = s1.split("\\/"); // 截取字符串 取得数字
			String[] q = s2.split("\\/");
			int a = Integer.parseInt(p[0]);
			int b = Integer.parseInt(p[1]);
			int c = Integer.parseInt(q[0]);
			int d = Integer.parseInt(q[1]);
			Fenshu Fenshu1 = new Fenshu(a, b); // 构造两个分数对象
			Fenshu Fenshu2 = new Fenshu(c, d);

			Fenshu result = new Fenshu();

			if (flag == 1)
				result = Fenshu1.add(Fenshu2);
			else if (flag == 2)
				result = Fenshu1.sub(Fenshu2);
			else if(flag == 3)
				result = Fenshu1.mul(Fenshu2);
			else if(flag == 4)
				result = Fenshu1.div(Fenshu2);
			System.out.println(result);
		}
		in.close();
	}
}



猜你喜欢

转载自blog.csdn.net/horizonhui/article/details/79668619