具有负数的分裂多项式

问题描述 投票:0回答:3

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

输出:

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"));
}
java polynomials exponent
3个回答
0
投票

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

使用正则表达式:((?:[\-\+]\dx\^[\-\+]\d)|[\-\+]\d)将为您提供一个正确的开始,以捕获写出所有+/-符号的多项式。例如:+2x^+2+3x^+1+4x^-3+6将是一个可接受的输入。然后,您将通过比赛进行交互并为自己处理每个比赛。之前的例子将为您提供以下匹配:

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

试试看here


0
投票

考虑数学运算的序列。分步一步:

  • 首先,拆分加法/减法,但这里检查你的发现是否有左操作数。如果没有左操作数,则它是符号而不是操作。因此,确定那些左侧有数字或变量的+/-,但是没有操作者。
  • 然后,拆分乘法和除法
  • 最后,对具有最高优先级的操作进行拆分 - 在您的情况下,指数函数

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
© www.soinside.com 2019 - 2024. All rights reserved.