117.info
人生若只如初见

java怎么实现多项式相加

在 Java 中,可以使用数组或链表来表示多项式,然后通过遍历多项式的每一项,将相同指数的项相加得到最终结果。

以下是一种使用链表表示多项式的实现方式:

public class PolynomialNode {
    int coefficient;
    int exponent;
    PolynomialNode next;
    
    public PolynomialNode(int coefficient, int exponent) {
        this.coefficient = coefficient;
        this.exponent = exponent;
        this.next = null;
    }
}

public class Polynomial {
    private PolynomialNode head;
    
    public Polynomial() {
        this.head = null;
    }
    
    public void addTerm(int coefficient, int exponent) {
        PolynomialNode newNode = new PolynomialNode(coefficient, exponent);
        
        if (head == null) {
            head = newNode;
        } else {
            PolynomialNode current = head;
            PolynomialNode previous = null;
            
            while (current != null && current.exponent > exponent) {
                previous = current;
                current = current.next;
            }
            
            if (current != null && current.exponent == exponent) {
                current.coefficient += coefficient;
            } else {
                newNode.next = current;
                
                if (previous != null) {
                    previous.next = newNode;
                } else {
                    head = newNode;
                }
            }
        }
    }
    
    public Polynomial add(Polynomial polynomial) {
        Polynomial result = new Polynomial();
        
        PolynomialNode node1 = this.head;
        PolynomialNode node2 = polynomial.head;
        
        while (node1 != null && node2 != null) {
            if (node1.exponent > node2.exponent) {
                result.addTerm(node1.coefficient, node1.exponent);
                node1 = node1.next;
            } else if (node1.exponent < node2.exponent) {
                result.addTerm(node2.coefficient, node2.exponent);
                node2 = node2.next;
            } else {
                int sum = node1.coefficient + node2.coefficient;
                
                if (sum != 0) {
                    result.addTerm(sum, node1.exponent);
                }
                
                node1 = node1.next;
                node2 = node2.next;
            }
        }
        
        while (node1 != null) {
            result.addTerm(node1.coefficient, node1.exponent);
            node1 = node1.next;
        }
        
        while (node2 != null) {
            result.addTerm(node2.coefficient, node2.exponent);
            node2 = node2.next;
        }
        
        return result;
    }
    
    public String toString() {
        StringBuilder sb = new StringBuilder();
        
        PolynomialNode current = head;
        boolean isFirstTerm = true;
        
        while (current != null) {
            if (current.coefficient != 0) {
                if (current.coefficient > 0 && !isFirstTerm) {
                    sb.append("+");
                }
                
                sb.append(current.coefficient);
                
                if (current.exponent > 1) {
                    sb.append("x^").append(current.exponent);
                } else if (current.exponent == 1) {
                    sb.append("x");
                }
                
                isFirstTerm = false;
            }
            
            current = current.next;
        }
        
        return sb.toString();
    }
}

使用示例:

public class Main {
    public static void main(String[] args) {
        Polynomial polynomial1 = new Polynomial();
        polynomial1.addTerm(3, 4);
        polynomial1.addTerm(2, 3);
        polynomial1.addTerm(5, 2);
        polynomial1.addTerm(1, 0);
        
        Polynomial polynomial2 = new Polynomial();
        polynomial2.addTerm(1, 3);
        polynomial2.addTerm(4, 2);
        polynomial2.addTerm(2, 1);
        polynomial2.addTerm(3, 0);
        
        Polynomial result = polynomial1.add(polynomial2);
        
        System.out.println("Polynomial 1: " + polynomial1);
        System.out.println("Polynomial 2: " + polynomial2);
        System.out.println("Result: " + result);
    }
}

输出结果:

Polynomial 1: 3x^4+2x^3+5x^2+1
Polynomial 2: x^3+4x^2+2x+3
Result: 3x^4+3x^3+9x^2+2x+4

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe590AzsLAgNeDV0.html

推荐文章

  • java运行类调试配置的方法是什么

    Java运行类调试配置的方法通常有以下几种: 使用命令行参数:可以在命令行中使用java命令来运行Java类,并通过参数设置调试的选项。例如,可以使用"-agentlib:jd...

  • java重写的特点有哪些

    Java中的方法重写具有以下特点: 发生在子类中:方法重写是在子类中对父类中同名方法的重新实现。
    必须具有相同的方法名称、参数列表和返回类型:子类中重写...

  • java sdk测试怎么实现

    要实现Java SDK的测试,可以按照以下步骤进行操作: 编写测试用例:首先,确定要测试的功能和边界情况,编写相应的测试用例。测试用例应该覆盖常见的情况和异常情...

  • java重写和重载有什么区别

    Java中的重写(Override)和重载(Overload)是Java面向对象编程的两个重要概念。
    重写(Override)是指子类对父类中已有的方法进行重新实现。子类重写父类...

  • Oracle执行语句太久如何关闭

    如果Oracle执行语句太久,可以采取以下几种方法来关闭执行语句: 使用"Ctrl+C"强制中断:在执行语句的终端窗口中,按下"Ctrl+C"组合键可以中断当前正在执行的语句...

  • vba怎么筛选出满足条件的数据

    在VBA中,可以使用AutoFilter方法来筛选出满足条件的数据。以下是一个示例代码,演示如何使用AutoFilter方法筛选出某一列中值大于10的数据:
    Sub FilterDat...

  • git commit命令的作用是什么

    git commit命令的作用是将暂存区中的文件提交到本地仓库。它会创建一个新的提交对象,包含了暂存区中的文件的快照以及提交信息(如作者、日期、提交注释等)。每...

  • winform异步更新界面怎么实现

    在WinForms中,可以使用Control类的Invoke或BeginInvoke方法来实现异步更新界面。 使用Invoke方法: private void UpdateUI()
    { if (InvokeRequired) { Inv...