今天学习链表的时候看到了多项式的加法,使用c语言链表编写,我现在一直在用java,采用面对对象的思想做了一下
多项式由三个部分组成:常数、系数和未知数(A、B、X等的)。多项式的加法规则是相同系数、相同未知数的常数可以进行相加,组成一个新的项,而不同系数或者不同未知数的,则不能进行相加减,应将其写到后面。我的多项式相加的想法是:先对一个用户输入的混乱的多项式根据系数来进行排序,再对排序过了两个多项式多项式相加的规则进行相加。最后输出结果。 以下是我的代码:
/**
* 用于对多项式的每一项进行分类
* @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;
}
}
上面这个类主要是为了表示系数和项数,如果,表示多项式中的一项
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);
}
}
上面这个类主要是为了表示多项式,里面包含了很多的point
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的容器写的,最后的结果测试成功.源码下载地址多项式加法