分数四则运算
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(); } }