用负面因素分裂多项式



我正在编写一个程序来添加和减去用户输入的多项式,但我遇到了处理负数的麻烦。该程序的正数将正常工作,但我得到以下输出的负数。

输出:

Coeficent: -2x^-2+3
Coeficent: 6
Exponent: 0
Exponent: 0
Exponent: 0
Exponent: 1
Exponent: 0

代码:

Scanner in = new Scanner(System.in);
LinkedList list = new LinkedList();
String polynomial= "-2x^-2+3x^1+6";
String[] parts = polynomial.split("x\^\d+\+?");
for (String part : parts) {
    System.out.println("Coeficent: " + part);
}
String[] terms = polynomial.split("(-|\+)");
for (String term : terms) {
    String[] exponent = term.split("\^");
    System.out.println("Exponent: " + (exponent.length > 1 ? exponent[1] : "0"));
}

这是一个示例,将每个术语的两个部分分开:

public static void main(String ...args) {
    Pattern termPat = Pattern.compile("([+-]?(\d+|(?=x)))(x(\^([+-]?(\d+)))?)?");
    System.out.println("Input: " + polynomial);
    int pos = 0;
    Matcher m = termPat.matcher(polynomial);
    while (true) {
        if (!m.find(pos))
            break;
        int coeff = Integer.parseInt(m.group(1) + (m.group(2).length() == 0 ? "1" : ""));
        int degree = Integer.parseInt((m.group(3) == null)? "0" : (m.group(5) == null)? "1" : m.group(5));
        System.out.println(String.format("Term - Coeff: %d  Degree: %d", coeff, degree));
        pos = m.end();
    }
}

输出:

Input: -2x^-2+3x^1+6
Term - Coeff: -2  Degree: -2
Term - Coeff: 3  Degree: 1
Term - Coeff: 6  Degree: 0

您可以使用正则表达式进行分割输入时展开。

使用正则:((?:[-+]dx^[-+]d)|[-+]d)将为您提供正确的启动以捕获所有/-符号写出的多项式。例如:+2x^+2+3x^+1+4x^-3+6将是接受的输入。然后,您将通过比赛结合并为他们进行处理。以前的示例将为您提供以下匹配:

  1. +2x^+2
  2. +3x^+1
  3. +4x^-3
  4. +6

在这里尝试

考虑数学操作的序列。分步:

  • 首先,拆分添加/减法,但在这里检查您的发现是否具有左上角。如果没有左术室,则是一个标志,而不是操作。因此,确定确实在其左侧具有数字或变量的/-,但没有操作员。
  • 然后,分配乘法和划分
  • 最后,为具有最高优先级的操作分开 - 在您的情况下,指数函数

最新更新