1. 程式人生 > >java實現一元多項式加法

java實現一元多項式加法

思路:

多項式結點類描述:(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();
			}
	}
	}	
}

執行結果: