分数四则运算
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
编写程序,实现两个分数的加减法
Input
输入包含多行数据;
每行数据是一个字符串,格式是"a/boc/d",其中a, b, c, d为数字(每个数字保证为正数并且不存在正号)。o是运算符"+"或者"-","*","\"。
数据以EOF结束,输入数据保证合法。
Output
直接输出结果,并且注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数形式。
Example Input
1/100+3/100 1/4-1/2 1/3-1/3 1/2*2/1 1/2\1/2
Example Output
1/25 -1/4 0 1 1
import java.util.*; public class Main { public static int gcd(int a, int b){ if(b == 0) return a; return gcd(b, a%b); } public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(cin.hasNext()){ String str = cin.next(); String []num = str.split("\\D+"); String []ch = str.split("\\d+"); int []numbers = new int[10]; for(int i = 0; i < 4; i++){ numbers[i] = Integer.parseInt(num[i]); } char op = ch[2].charAt(0); int fen = 0, mu = 0; int a = numbers[0]; int b = numbers[1]; int c = numbers[2]; int d = numbers[3]; if(op == '+'){ mu = b*d/gcd(b, d); fen = mu/b*a + mu/d*c; } else if(op == '-'){ mu = b*d/gcd(b, d); fen = mu/b*a - mu/d*c; } else if(op == '*'){ fen = a*c; mu = b*d; } else if(op == '\\'){ fen = a*d; mu = b*c; } int aa = Math.abs(gcd(fen, mu)); fen /= aa; mu /= aa; if(fen == mu || fen == -mu) System.out.println(fen/mu); else if(fen == 0) System.out.println(0); else System.out.println(fen+"/"+mu); } } }
import java.util.*; public class Main { static int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } public static void main(String[] args) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { String s = cin.nextLine(); int num[] = new int[5]; int pos = 0; int cnt = 0; int sum = 0; for (int i = 0; i < s.length(); i++) { if (i == s.length() - 1) { num[cnt++] = sum * 10 + s.charAt(i) - '0'; break; } if (s.charAt(i) == '+' || s.charAt(i) == '-' || s.charAt(i) == '*' || s.charAt(i) == '\\') { pos = i; } if (s.charAt(i) == '/' || s.charAt(i) == '+' || s.charAt(i) == '-' || s.charAt(i) == '*' || s.charAt(i) == '\\') { num[cnt++] = sum; sum = 0; } else { sum = sum * 10 + s.charAt(i) - '0'; } } int mu = 0; int fen = 0; if (s.charAt(pos) == '+') { mu = num[1] / gcd(num[1], num[3]) * num[3]; fen = mu/num[1] * num[0] + mu / num[3] * num[2]; } if (s.charAt(pos) == '-') { mu = num[1] / gcd(num[1], num[3]) * num[3]; fen = mu/num[1] * num[0] - mu / num[3] * num[2]; } if (s.charAt(pos) == '*') { mu = num[1] * num[3]; fen = num[0] * num[2]; } if (s.charAt(pos) == '\\') { mu = num[1] * num[2]; fen = num[0] * num[3]; } int aa = Math.abs(gcd(fen, mu)); if(fen == 0){ System.out.println(0); } else if(Math.abs(fen) == Math.abs(mu)) System.out.println(fen/mu); else { fen/=aa; mu/=aa; System.out.println(fen+"/"+mu); } } } }