java實現一元多項式加法
阿新 • • 發佈:2018-12-01
思路:
多項式結點類描述:(Node結點,Linklist類的描述在建立單鏈表的文章已經實現)
public class PolynNode {
public double coef; //係數
public int expn; //指數
public PolynNode(double coef,int expn){ //建構函式
this.coef=coef;
this.expn=expn;
}
}
多項式類的描述:
import java.util.Scanner; public class PolynList extends Linklist{ //多項式類繼承Linklist單鏈表 public PolynList(int n)throws Exception{ //建立多項式有序連結串列 Scanner sc=new Scanner(System.in); //構造用於輸入的物件 head.data=new PolynNode(0,-1); //初始化頭結點 for(int i=0;i<n;i++){ //輸入n個結點的資料域的值 double coef=sc.nextDouble(); //係數值 int expn=sc.nextInt(); //指數值 insert(i,new PolynNode(coef,expn)); //插入到有序連結串列中 } } //多項式加法,qa=qa+qb 利用兩個多項式的結點構成“和多項式”,並返回LA public PolynList addPolynList(PolynList LA,PolynList LB)throws Exception{ Node ha=LA.head; Node qa=LA.head.next; Node qb=LB.head.next; while(qa!=null&&qb!=null){ PolynNode a=(PolynNode)qa.data; //將Node類強制轉換為PolyNode類 PolynNode b=(PolynNode)qb.data; if(a.expn<b.expn){ //如果a的指數小於b的指數 ha.next=qa; ha=qa; qa=qa.next; } else if(a.expn>b.expn){ ha.next=qb; ha=qb; qb=qb.next; } else{ double sum=a.coef+b.coef; if(sum!=0){ a.coef=sum; ha.next=qa; ha=qa; qa=qa.next; qb=qb.next; } else{ qa=qa.next; qb=qb.next; } } } ha.next=(qa!=null?qa:qb); //插入剩餘結點 return LA; } public static void main(String[] args)throws Exception{ System.out.println("輸入多項式A各項的係數和指數"); PolynList LA=new PolynList(4); System.out.println("輸入多項式B各項的係數和指數"); PolynList LB=new PolynList(3); LA.addPolynList(LA, LB); //對多項式LA,LB求和,並賦給LA System.out.println("求和後多項式各項為"); LA.display(); //列印LA中的項 } public void display(){ //過載父類display()方法 for(int i=0;i<length();i++){ try{ PolynNode e=(PolynNode)get(i); System.out.println("係數為"+e.coef+" 指數為"+e.expn); }catch(Exception e){ e.printStackTrace(); } } } }
執行結果: