正则表达式练习之题目1103:二次方程计算器

题目描述:

设计一个二次方程计算器

输入:

每个案例是关于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);
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值