今天学习链表的时候看到了多项式的加法,使用c语言链表编写,我如今一直在用java,采用面对对象的思想作了一下java
多项式由三个部分组成:常数、系数和未知数(A、B、X等的)。多项式的加法规则是相同系数、相同未知数的常数能够进行相加,组成一个新的项,而不一样系数或者不一样未知数的,则不能进行相加减,应将其写到后面。个人多项式相加的想法是:先对一个用户输入的混乱的多项式根据系数来进行排序,再对排序过了两个多项式多项式相加的规则进行相加。最后输出结果。 如下是个人代码:git
/** * 用于对多项式的每一项进行分类 * @author steven * */ public class Point { private int coefficient;//系数 private int exponent;//指数 public Point(int coefficient, int exponent) { super(); this.coefficient = coefficient; this.exponent = exponent; } public Point(){ } /** * 获取系数 * @return */ public int getCoefficient() { return coefficient; } public void setCoefficient(int coefficient) { this.coefficient = coefficient; } //获取指数 public int getExponent() { return exponent; } public void setExponent(int exponent) { this.exponent = exponent; } }
上面这个类主要是为了表示系数和项数,若是,表示多项式中的一项github
import java.util.ArrayList; /** * 多项式 * @author steven * */ public class Multinomial { private ArrayList<Point> terms=new ArrayList<Point>(); public ArrayList<Point> getTerms() { return terms; } public void setTerms(ArrayList<Point> terms) { this.terms = terms; } /** * 重写toString方法主要是为了输出查看 */ @Override public String toString() { StringBuffer sb=new StringBuffer(""); for (Point point : terms) { sb.append(point.getCoefficient()+"X"+point.getExponent()+"+"); } return sb.substring(0, sb.length()-1); } }
上面这个类主要是为了表示多项式,里面包含了不少的pointapp
public class Multinomials { /** * 多项式的加法 * @param multinomialA * @param multinomialB * @return */ public static Multinomial Add(Multinomial multinomialA,Multinomial multinomialB){ int i=0;//用于遍历multinomialA int j=0;//用于遍历multinomialB Multinomial multinomialC=new Multinomial(); Point pointA=null; Point pointB=null; for(;i<multinomialA.getTerms().size()&&j<multinomialB.getTerms().size();){ pointA=multinomialA.getTerms().get(i);//获取multinomialA对应位置的值 pointB=multinomialB.getTerms().get(j);//获取multinomialB对应位置的值 //比较指数,根据指数执行不一样的命令 if(pointA.getExponent()>pointB.getExponent()){ multinomialC.getTerms().add(pointA); i++; }else if(pointA.getExponent()<pointB.getExponent()){ multinomialC.getTerms().add(pointB); j++; }else{ pointA.setCoefficient(pointA.getCoefficient()+pointB.getCoefficient()); //pointA.setExponent(pointA.getExponent()+pointB.getExponent()); multinomialC.getTerms().add(pointA); i++; j++; } } if(j!=multinomialA.getTerms().size()){//multinomialA遍历完成 for(;j<multinomialB.getTerms().size();j++){ pointB=multinomialB.getTerms().get(j); multinomialC.getTerms().add(pointB); } } if(i!=multinomialA.getTerms().size()){//multinomialB遍历完成 for(;i<multinomialA.getTerms().size();i++){ pointA=multinomialA.getTerms().get(i); multinomialC.getTerms().add(pointA); } } return multinomialC; } /** * 测试类 * @param args */ public static void main(String[] args) { Point a=new Point(5,8); Point b=new Point(6,7); Point c=new Point(-1,8); Point d=new Point(2,1); Multinomial multinomialA=new Multinomial(); multinomialA.getTerms().add(a); multinomialA.getTerms().add(b); Multinomial multinomialB=new Multinomial(); multinomialB.getTerms().add(c); multinomialB.getTerms().add(d); Multinomial multinomialC= Multinomials.Add(multinomialA, multinomialB); System.out.println(multinomialC.toString()); } }
这是仿照java的容器写的,最后的结果测试成功.源码下载地址多项式加法ide