描述
编写一个C程序,实现两个分数的加减法
-
输入
-
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
输出
-
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
-
1/8+3/8 1/4-1/2 1/3-1/3
样例输出
-
1/2 -1/4 0
wa
import java.io.BufferedInputStream; import java.util.Scanner; public class Main { private static Scanner sc = new Scanner(new BufferedInputStream(System.in)); public static void main(String[] args) { String line = null; while ((line = sc.nextLine()) != null && !line.isEmpty()) { System.out.println(result(line)); } } public static String result(String line) { char[] chars = line.toCharArray(); int a = chars[0] - 48; int b = chars[2] - 48; int c = chars[4] - 48; int d = chars[6] - 48; char o = chars[3]; int n = b * d / moveCombe(b, d); a = a * (n / b); c = c * (n / d); int m = 0; StringBuilder sb = new StringBuilder(); switch (o) { case '+': m = a + c; b = m / moveCombe(m, n); d = n / moveCombe(m, n); sb.append(b % d == 0 ? b / d : b + "/" + d); break; case '-': m = a - c; if (m == 0) { sb.append(0); break; } int t = Math.abs(m); b = t * (m / t) / moveCombe(t, n); d = n / moveCombe(t, n); sb.append(b % d == 0 ? b / d : b + "/" + d); break; default: break; } return sb.toString(); } public static int moveCombe(int a, int b) { if (a < b) { return moveCombe(b, a); } if (0 == b) { return a; } if (isTwo(a)) { if (isTwo(b)) { return moveCombe(a / 2, b / 2) * 2; } return moveCombe(a / 2, b); } else { if (isTwo(b)) { return moveCombe(a, b / 2); } return moveCombe(b, a - b); } } private static boolean isTwo(int a) { if (0 == a % 2) { return true; } else { return false; } } }
哪位大神能看看为什么错了啊,我测试了10W+的数据,都是对的啊