精华内容
下载资源
问答
  • 多项式相加

    2018-12-03 10:05:28
    多项式相加
  • //多项式相加LinkList* add2Link(LinkList*L1, LinkList*L2){LinkList*p1, *p2;LinkList*head , *pre, *p;head = new LinkList;head->next = NULL;pre = head;p1 = L1->next;p2 = L2->next;while (p1&&...

    6a82d2c8780c8c680331dc63be530b40.png

    //多项式相加

    LinkList* add2Link(LinkList*L1, LinkList*L2)

    {

    LinkList*p1, *p2;

    LinkList*head , *pre, *p;

    head = new LinkList;

    head->next = NULL;

    pre = head;

    p1 = L1->next;

    p2 = L2->next;

    while (p1&&p2)

    {

    if (p1->exp == p2->exp)

    {

    p = new LinkList;

    p->coef = p1->coef + p2->coef;

    p->exp = p1->exp;

    p1 = p1->next;

    p2 = p2->next;

    }

    else if ((p1->exp) < (p2->exp))

    {

    p = new LinkList;

    p->coef = p1->coef;

    p->exp = p1->exp;

    p1 = p1->next;

    }

    else

    {

    p = new LinkList;

    p->coef = p2->coef;

    p->exp = p2->exp;

    p2 = p2->next;

    }

    pre->next = p;

    pre = p;

    }

    if (p1&&!p2)

    {

    while (p1)

    {

    p = new LinkList;

    p->coef = p1->coef;

    p->exp = p1->exp;

    p1 = p1->next;

    pre->next = p;

    pre = p;

    }

    }

    else if (!p1&&p2)

    {

    while (p2)

    {

    p = new LinkList;

    p->coef = p2->coef;

    p->exp = p2->exp;

    p2 = p2->next;

    pre->next = p;

    pre = p;

    }

    }

    pre->next = NULL;

    return head;

    }

    struct Node

    {

    int data;

    int exp;

    };

    list* add2list(list* l1, list*l2)

    {

    listl3;

    while(!l1->empty()&&!l2->empty())

    {

    if(l1->back().exp==l2->back().exp)

    {

    Node n1=new Node;

    n1.data=l1->back().data+l2->back().data;

    n1.exp=l1->back().exp;

    l3.push_front(n1);

    l1->pop_back();

    l2->pop_back();

    }

    else

    {

    if(l1->back().exp>l2->back().exp)

    {

    Node n1=new Node;

    n1.data=l2->back().data;

    n1.exp=l2->back().exp;

    l3.push_front(n1);

    l2->pop_back();

    }

    else

    {

    Node n1=new Node;

    n1.data=l1->back().data;

    n1.exp=l1->back().exp;

    l3.push_front(n1);

    l1->pop_back();

    }

    }

    }

    while(!l2->empty())

    {

    Node n1=new Node;

    n1.data=l2->back().data;

    n1.exp=l2->back().exp;

    l3.push_front(n1);

    l2->pop_back();

    }

    while(!l1->empty())

    {

    Node n1=new Node;

    n1.data=l1->back().data;

    n1.exp=l1->back().exp;

    l3.push_front(n1);

    l1->pop_back();

    }

    return *l3;

    }

    展开全文
  • 链表实现的多项式相加程序可实现多个多项式相加
  • 当前位置:我的异常网» J2SE»一个简略java程序,链表实现多项式相加一个简略java程序,链表实现多项式相加www.myexceptions.net网友分享于:2014-11-02浏览:0次一个简单java程序,链表实现多项式相加...

    当前位置:我的异常网» J2SE » 一个简略java程序,链表实现多项式相加

    一个简略java程序,链表实现多项式相加

    www.myexceptions.net  网友分享于:2014-11-02  浏览:0次

    一个简单java程序,链表实现多项式相加

    package Phlonomial;

    public class Literal {

    private int coefficient;

    private int exponent;

    Literal next = null;// 默认是null

    public Literal() {

    this(0, 0);

    }

    public Literal(int coefficient, int exponent) {

    setCoe(coefficient);

    setExp(exponent);

    this.next=null;

    }

    public int getCoe() {

    return coefficient;

    }

    public int getExp() {

    return exponent;

    }

    public void setCoe(int coefficient) {

    this.coefficient = coefficient;

    }

    public void setExp(int exponent) {

    this.exponent = exponent;

    }

    }

    上面的是结点类

    下面的是链表类

    package Phlonomial;

    public class Polynomial {

    private Literal head;

    private Literal current;

    public Polynomial() {

    head = new Literal();

    current = head;

    }

    public void insertTerm(int coefficient, int exponent) {

    Literal node = new Literal(coefficient, exponent);

    current.next = node;// 在现有结点后添加新结点

    current = node;

    }

    public Polynomial add(Polynomial p) {

    Polynomial result = new Polynomial();

    current = head.next;

    p.current = p.head.next;// 都指向第一个元素

    // 只有都不为空才能比较指数大小

    while (current != null && p.current != null) {

    System.out.println("指数 "+current.getExp()+" "+p.current.getExp());

    // 指数相等时候

    if (current.getExp() == p.current.getExp()) {

    int a = current.getCoe() + p.current.getCoe();

    if (a != 0) {

    result.insertTerm(a, current.getExp());

    current = current.next;

    p.current = p.current.next;

    }

    }

    // 指数不等时候

    if (current.getExp() 

    result.insertTerm(current.getCoe(), current.getExp());

    current = current.next;

    }

    if (current.getExp() > p.current.getExp()) {

    result.insertTerm(p.current.getCoe(), p.current.getExp());

    p.current = p.current.next;

    }

    result.print();

    }

    // 处理还有剩余项的情况

    while (current != null) {

    result.insertTerm(current.getCoe(), current.getExp());

    current = current.next;

    }

    while (p.current != null) {

    result.insertTerm(p.current.getCoe(), p.current.getExp());

    p.current = p.current.next;

    }

    return result;

    }

    public void print() {

    String result = "";

    current = head.next;// 指向第一个

    while (current != null) {

    String coe = "";

    String str = "";// 先清空

    if (current.getCoe() != 1)// 系数

    coe += current.getCoe();

    if (current.getExp() == 1) // 指数为1

    str = coe + "x";

    else

    str = coe + "x^" + current.getExp();

    if (current == head.next)

    result += str;

    else

    result += "+" + str;

    current = current.next;

    }

    System.out.println(result);

    }

    public static void main(String[] args) {

    Polynomial p1 = new Polynomial();

    p1.insertTerm(1, 1);

    p1.insertTerm(2, 2);

    p1.insertTerm(3, 3);

    p1.insertTerm(4, 4);

    Polynomial p2 = new Polynomial();

    p2.insertTerm(2, 3);

    p2.insertTerm(4, 5);

    //模拟实现下面p1,p2相加的过程

    Polynomial polynomial=new Polynomial();

    p2.current=p2.head.next;

    polynomial.insertTerm(p2.current.getCoe(), p2.current.getExp());

    p2.current=p2.current.next;

    polynomial.insertTerm(p2.current.getCoe(), p2.current.getExp());

    polynomial.print();

    Polynomial p = p1.add(p2);

    System.out.print("p1+p2=");

    p.print();

    }

    }

    运行结果是

    2x^3+4x^5

    指数 1 3

    x

    指数 2 3

    Exception in thread "main" java.lang.NullPointerException

    at Phlonomial.Polynomial.insertTerm(Polynomial.java:15)

    at Phlonomial.Polynomial.add(Polynomial.java:39)

    at Phlonomial.Polynomial.main(Polynomial.java:107)

    不懂为什么报错啊,我觉得和模拟实现的过程几乎一样,为何这个会报错?

    求解答,感激不尽~

    ------解决思路----------------------

    // 指数不等时候

    else if (current.getExp() 

    result.insertTerm(current.getCoe(), current.getExp());

    current = current.next;

    }

    else {

    result.insertTerm(p.current.getCoe(), p.current.getExp());

    p.current = p.current.next;

    }

    result.print();

    }

    把代码的指数小于和指数大于的时候改一下  加2个else就可以了

    原因在于: 当指数相等时 程序会改变current和p.current的值 然后可能会满足指数不等的情况   应该直接让程序进入下一循环即可

    文章评论

    展开全文
  • 一元多项式相加减 详细的解释 源代码 运行结果
  • import java.util.ArrayList;import java.util.List;/*** 多项式的加* @author User**/public class Multinominal {/*** 多项式相加* +8X^2-5X^4+3X^5+3X^6+3X^7* @param args*/public static void main(...

    package cn.ffr.multi;

    import java.util.ArrayList;

    import java.util.List;

    /**

    * 多项式的加

    * @author User

    *

    */

    public class Multinominal {

    /**

    * 多项式相加

    * +8X^2-5X^4+3X^5+3X^6+3X^7

    * @param args

    */

    public static void main(String[] args) {

    List m1 = new ArrayList();

    List m2 = new ArrayList();

    m1.add(new Node(3,1));

    m1.add(new Node(4,2));

    m1.add(new Node(3,5));

    m1.add(new Node(3,6));

    m2.add(new Node(-3,1));

    m2.add(new Node(4,2));

    m2.add(new Node(-5,4));

    m2.add(new Node(3,7));

    List result = add(m1, m2);

    for(Node n : result){

    System.out.print(n);

    }

    }

    /**

    * 多项式相加

    * @param m1

    * @param m2

    * @return

    */

    public static List add(List m1, List m2){

    List result = new ArrayList();

    int i = 0, j= 0;

    for(; i < m1.size() && j < m2.size();){

    Node n1 = m1.get(i);

    Node n2 = m2.get(j);

    if(n1.getExp() < n2.getExp()){

    result.add(n1);

    i++;

    continue;

    }else if(n1.getExp().equals(n2.getExp())){

    if(n1.getCoe() +n2.getCoe() != 0){

    result.add(new Node(n1.getCoe() + n2.getCoe(), n1.getExp()));

    }

    i++;j++;continue;

    }else{

    result.add(n2);

    j++;

    continue;

    }

    }

    while(i < m1.size()){

    result.add(m1.get(i));

    i++;

    }

    while(j < m2.size()){

    result.add(m2.get(j));

    j++;

    }

    return result;

    }

    }

    class Node {

    private Integer coe;//系数

    private Integer exp;//指数

    public Node() {

    super();

    }

    public Node(Integer coe, Integer exp) {

    super();

    this.coe = coe;

    this.exp = exp;

    }

    public Integer getCoe() {

    return coe;

    }

    public void setCoe(Integer coe) {

    this.coe = coe;

    }

    public Integer getExp() {

    return exp;

    }

    public void setExp(Integer exp) {

    this.exp = exp;

    }

    @Override

    public String toString() {

    return (coe>0?"+":"")+coe+"X^"+exp;

    }

    }

    展开全文
  • java多项式相加

    2014-03-23 16:46:50
    java多项式相加,把两个多项式相加,得出一个多项式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,209
精华内容 883
关键字:

多项式相加