今天學習連結清單的時候看到了多項式的加法,使用c語言連結清單編寫,我現在一直在用java,采用面對對象的思想做了一下
多項式由三個部分組成:常數、系數和未知數(A、B、X等的)。多項式的加法規則是相同系數、相同未知數的常數可以進行相加,組成一個新的項,而不同系數或者不同未知數的,則不能進行相加減,應将其寫到後面。我的多項式相加的想法是:先對一個使用者輸入的混亂的多項式根據系數來進行排序,再對排序過了兩個多項式多項式相加的規則進行相加。最後輸出結果。 以下是我的代碼:
public class Point {
private int coefficient;//系數
private int exponent;//指數
public Point(int coefficient, int exponent) {
super();
this.coefficient = coefficient;
this.exponent = exponent;
}
public Point(){
}
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;
public class Multinomial {
private ArrayList terms=new ArrayList();
public ArrayList getTerms() {
return terms;
}
public void setTerms(ArrayList terms) {
this.terms = terms;
}
@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 {
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
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()
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
pointB=multinomialB.getTerms().get(j);
multinomialC.getTerms().add(pointB);
}
}
if(i!=multinomialA.getTerms().size()){//multinomialB周遊完成
for(;i
pointA=multinomialA.getTerms().get(i);
multinomialC.getTerms().add(pointA);
}
}
return multinomialC;
}
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的容器寫的,最後的結果測試成功.源碼下載下傳位址多項式加法