java实现多项式的加法

今天学习链表的时候看到了多项式的加法,使用c语言链表编写,我现在一直在用java,采用面对对象的思想做了一下

多项式由三个部分组成:常数、系数和未知数(A、B、X等的)。多项式的加法规则是相同系数、相同未知数的常数可以进行相加,组成一个新的项,而不同系数或者不同未知数的,则不能进行相加减,应将其写到后面。我的多项式相加的想法是:先对一个用户输入的混乱的多项式根据系数来进行排序,再对排序过了两个多项式多项式相加的规则进行相加。最后输出结果。 以下是我的代码:

1/** 2 * 用于对多项式的每一项进行分类 3 * @author steven 4 * 5 */ 6public class Point { 7 private int coefficient;//系数 8 private int exponent;//指数 9 10 public Point(int coefficient, int exponent) { 11 super(); 12 this.coefficient = coefficient; 13 this.exponent = exponent; 14 } 15 public Point(){ 16 17 } 18 /** 19 * 获取系数 20 * @return 21 */ 22 public int getCoefficient() { 23 return coefficient; 24 } 25 public void setCoefficient(int coefficient) { 26 this.coefficient = coefficient; 27 } 28 //获取指数 29 public int getExponent() { 30 return exponent; 31 } 32 public void setExponent(int exponent) { 33 this.exponent = exponent; 34 } 35}

上面这个类主要是为了表示系数和项数,如果,表示多项式中的一项

1import java.util.ArrayList; 2/** 3 * 多项式 4 * @author steven 5 * 6 */ 7public class Multinomial { 8 private ArrayList<Point> terms=new ArrayList<Point>(); 9 10 public ArrayList<Point> getTerms() { 11 return terms; 12 } 13 14 public void setTerms(ArrayList<Point> terms) { 15 this.terms = terms; 16 } 17 /** 18 * 重写toString方法主要是为了输出查看 19 */ 20 @Override 21 public String toString() { 22 StringBuffer sb=new StringBuffer(""); 23 for (Point point : terms) { 24 sb.append(point.getCoefficient()+"X"+point.getExponent()+"+"); 25 } 26 return sb.substring(0, sb.length()-1); 27 } 28}

上面这个类主要是为了表示多项式,里面包含了很多的point

1public class Multinomials { 2 /** 3 * 多项式的加法 4 * @param multinomialA 5 * @param multinomialB 6 * @return 7 */ 8 public static Multinomial Add(Multinomial multinomialA,Multinomial multinomialB){ 9 int i=0;//用于遍历multinomialA 10 int j=0;//用于遍历multinomialB 11 Multinomial multinomialC=new Multinomial(); 12 Point pointA=null; 13 Point pointB=null; 14 for(;i<multinomialA.getTerms().size()&&j<multinomialB.getTerms().size();){ 15 pointA=multinomialA.getTerms().get(i);//获取multinomialA对应位置的值 16 pointB=multinomialB.getTerms().get(j);//获取multinomialB对应位置的值 17 //比较指数,根据指数执行不同的命令 18 if(pointA.getExponent()>pointB.getExponent()){ 19 multinomialC.getTerms().add(pointA); 20 i++; 21 }else if(pointA.getExponent()<pointB.getExponent()){ 22 multinomialC.getTerms().add(pointB); 23 j++; 24 }else{ 25 pointA.setCoefficient(pointA.getCoefficient()+pointB.getCoefficient()); 26 //pointA.setExponent(pointA.getExponent()+pointB.getExponent()); 27 multinomialC.getTerms().add(pointA); 28 i++; 29 j++; 30 } 31 } 32 if(j!=multinomialA.getTerms().size()){//multinomialA遍历完成 33 for(;j<multinomialB.getTerms().size();j++){ 34 pointB=multinomialB.getTerms().get(j); 35 multinomialC.getTerms().add(pointB); 36 } 37 } 38 if(i!=multinomialA.getTerms().size()){//multinomialB遍历完成 39 for(;i<multinomialA.getTerms().size();i++){ 40 pointA=multinomialA.getTerms().get(i); 41 multinomialC.getTerms().add(pointA); 42 } 43 } 44 return multinomialC; 45 } 46 /** 47 * 测试类 48 * @param args 49 */ 50 public static void main(String[] args) { 51 Point a=new Point(5,8); 52 Point b=new Point(6,7); 53 Point c=new Point(-1,8); 54 Point d=new Point(2,1); 55 Multinomial multinomialA=new Multinomial(); 56 multinomialA.getTerms().add(a); 57 multinomialA.getTerms().add(b); 58 Multinomial multinomialB=new Multinomial(); 59 multinomialB.getTerms().add(c); 60 multinomialB.getTerms().add(d); 61 Multinomial multinomialC= Multinomials.Add(multinomialA, multinomialB); 62 System.out.println(multinomialC.toString()); 63 64 } 65}

这是仿照java的容器写的,最后的结果测试成功.源码下载地址多项式加法

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

CGAL功能大纲

算术与代数ArithmeticandAlgebra主要提供了计算几何用到的数学基础:数据类型、多项式、数据结构与算法代数基础AlgebraicFoundations这个包从概念、类和函数的角度定义了代数对CGAL的意义。数据类型NumberT

这可能是目前最全的!java开发手册嵩山版

在这里分享一份mybatis从入门到精通的强力教程,定能够助你一臂之力。Mybatis基本介绍1.ORM和MyBatis1.对象/关系数据库映射(ORM)1.基本映射方式1.流行的ORM框架简介目前流行的编程语言,例如Java、C等,都是面向对象的编程语言;而目前主流的数据库产品,例如Oracle、DB2等,依然是关系数据库。编程语言和底

人工智能数学基础-线性代数3:线性空间、线性相关及基

一、向量空间(线性空间)及基域线性空间是在考察了大量的数学对象(如几何学与物理学中的向量,代数学中的n元向量、矩阵、多项式,分析学中的函数等)的本质属性后抽象出来的数学概念。1.1、详细定义向量空间也称线性空间,设V是一个非空集合,P是一个数域。若:1.在V中定义了一种运算,称为加法,即对V中任意两个元素α与β都按某一法则对应于V内惟一确定的一个元素α

#numpy#关于数组形状

!(http://static.oschina.net/uploads/space/2016/0623/155855_t48w_987833.jpg)numpy的多维数组虽然好用,但是不熟悉的话也很难理解,今天要研究基于多项式的朴素贝叶斯,sklearn的官方示例中用了numpy,但是看不太懂numpy的那句,于是总结如下:numpy的数组相

Java8 HashMap详解

Java8HashMapJava8对HashMap进行了一些修改,最大的不同就是利用了红黑树,所以其由数组链表红黑树组成。根据Java7HashMap的介绍,我们知道,查找的时候,根据hash值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决于链表的