【问题标题】:Java Polynomial MultiplicationJava多项式乘法
【发布时间】:2018-10-15 21:14:56
【问题描述】:

我正在尝试为多项式乘法编写一个简单的代码。我认为将输入作为诸如“3x^2”之类的字符串是合乎逻辑的。

问题是我不知道如何处理其中的“x”。我怎样才能把它们变成可以成倍增加的东西?逻辑应该是什么?我是 Java 新手,我真的需要帮助。

例如:

String s = "x^2";
String s2 = "3x^5";
//(Multiply them)
result = 3x^7

【问题讨论】:

  • IMO 这不是一个很容易使用的输入格式,它需要被解析并导致奇怪的边缘情况,例如多元多项式和重复指数。将多项式表示为一组系数(或类似的)将删除这些方面,让您专注于乘法本身
  • 我知道这真的很难而且没必要,我从一位教授那里得到了这个问题。他说我现在对java的了解可以做到,我想试试。我没有做它很好,但它现在可以工作。我仍然认为这个问题是不必要的。

标签: java polynomials multiplication


【解决方案1】:
public static int[] multiply(String term1, String term2)
{
    int[] t1 = parse(term1);
    int[] t2 = parse(term2);
    int[] ret = new int[2];
    ret[0] = t1[0] * t2[0];
    ret[1] = t1[1] + t2[1];
    return ret;
}

public static int[] parse(String term)
{
    int pos = term.indexOf("x^");
    String coeffStr = term.substring(0, pos);
    int coeff = Integer.parseInt(coeffStr);
    String powerStr = term.substring(pos + 2);
    int power = Integer.parseInt(powerStr);
    int[] ret = new int[2];
    ret[0] = coeff;
    ret[1] = power;
    return ret;
}

【讨论】:

  • 我需要澄清一下。它可以用于负数吗?我不太习惯数组。谢谢你的回答。
【解决方案2】:

这适用于 Ax^n、x^n 或 Ax 格式的多项式相乘。我会将您要相乘的项放入一个列表中,然后将系数和幂解析为一个 HashMap,然后使用它们来获得您的最终结果

    List<String> terms = new ArrayList<>(Arrays.asList("x^2", "3x^5", "5x"));

    Map<Integer,Integer> map = new HashMap<>();

    for ( String term : terms ) {

        String coefficient = term.split("x")[0].matches("") ? "1" : term.split("x")[0];

        String[] exponent = term.split("x");

        String power = exponent.length > 1 ? exponent[1].split("\\^")[1] : "1";

        map.put(Integer.parseInt(coefficient), Integer.parseInt(power));
    }
    Integer finalCoefficient = 1;
    Integer finalPower = 0;

    for ( Integer coefficient : map.keySet() ) {
        finalCoefficient *= coefficient;
        finalPower += map.get(coefficient);
    }
    System.out.println(finalCoefficient + "x" + finalPower);

【讨论】:

  • 这对我来说似乎很先进,但我想我明白了主要逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2019-04-26
相关资源
最近更新 更多