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<Node> m1 = new ArrayList<Node>(); List<Node> m2 = new ArrayList<Node>(); 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<Node> result = add(m1, m2); for(Node n : result){ System.out.print(n); } } /** * 多项式相加 * @param m1 * @param m2 * @return */ public static List<Node> add(List<Node> m1, List<Node> m2){ List<Node> result = new ArrayList<Node>(); 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; } }