-
题目描述:
-
设计一个二次方程计算器
-
输入:
-
每个案例是关于x的一个二次方程表达式,为了简单,每个系数都是整数形式。
-
输出:
-
每个案例输出两个实数(由小到大输出,中间由空格隔开),保留两位小数;如果无解,则输出“No Solution”。
-
样例输入:
-
x^2+x=3x+4
-
样例输出:
-
-1.24 3.24
import java.io.BufferedInputStream; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class 二次方程计算2{ static int arr[]; static String regx[] = { "([+-]?)(\\d*)x\\^2", "([+-]?)(\\d*)x", "([+-]?)(\\d+)" }; public static void main(String[] args) { Scanner sc = new Scanner(new BufferedInputStream(System.in)); while (sc.hasNextLine()) { String str = sc.nextLine().replaceAll("\\s", ""); StringBuffer sb = new StringBuffer(str); arr = new int[3]; String s1, s2; for (int i = 0; i < 3; i++) { Pattern p = Pattern.compile(regx[i]); Matcher m = p.matcher(sb); int temp = 0; int index; while (m.find()) { index = sb.indexOf("="); s1 = m.group(1); s2 = m.group(2); if (s1.equals("-")) temp = -1 * Integer.parseInt(s2); else { if (s2.equals("")) temp = 1; else temp = Integer.parseInt(s2); } if(m.start()<index) arr[i] += temp; else arr[i] -= temp; sb.replace(m.start(), m.end(), ""); m.reset(); } } int k = arr[1] * arr[1] - 4 * arr[0] * arr[2]; if (k < 0) System.out.println("No Solution"); else { double d1 = (-arr[1] + Math.sqrt(k)) / (2 * arr[0]); double d2 = (-arr[1] - Math.sqrt(k)) / (2 * arr[0]); System.out.printf("%.2f %.2f\n",d2,d1); } } } }