多项式的相加要求:两个多项式的单项式的指数统一都按降序排列,且两个多项式具体有多少项和项的次数和每一项的系数都通过外部输入。输出要求:合并两个多项式的同类项并将系数的输出到屏幕。
需要创建两个class文件
PolynNode.class :
package lianbiao;
public class PolynNode {
public double coef;
public int expn;
public PolynNode(double coef, int expn)
{
this.coef=coef;
this.expn =expn;
}
}
PolynList.class:
package lianbiao;
import java.util.Scanner;
class PolynList extends LinkList{
public PolynList(int n) throws Exception{
head.data= new PolynNode(0,-1); //初始化头结点
Scanner sc= new Scanner(System.in); //构造用于输入的对象
for(int i=1;i<=n;i++)
{
double coef =sc.nextDouble(); //系数值
int expn = sc.nextInt(); //指数值
insert(new PolynNode(coef,expn)); //插入到有序列表
}
}
public void insert(PolynNode e) throws Exception //指数递增顺序插入到多项式有序链表
{
int j=0;
while(j<length()) //与有序链表中的已有项进行指数比较
{
PolynNode t = (PolynNode) get(j);
if(t.expn>e.expn)
break;
j++;
}
insert(j,e); //调用父类的插入函数
}
public int cmp(PolynNode a, PolynNode b){ //判定函数,比较多项式中两项的指数,按a的指数小于大于等于b的指数,分别返回-1,0,+1
if(a.expn<b.expn) //a与b指数值比较
return -1;
else if(a.expn==b.expn)
return 0;
else
return 1;
}
//多项式加法:Pa=Pa+Pb
public PolynList addPolyn(PolynList LA,PolynList LB)
{
Node ha = LA.head; //ha指向新形成链表尾结点
Node qa = LA.head.next; //qa指向LA中需要计算的当前项
Node qb = LB.head.next; //qb指向LB中需要计算的当前项
while(qa!=null&&qb!=null)
{
PolynNode a = (PolynNode)qa.data;
PolynNode b = (PolynNode)qb.data;
switch(cmp(a,b))
{
case -1 : //多项式LA中当前结点的指数值小
ha.next =qa;
ha= qa;
qa = qa.next;
break;
case 0:
double sum = a.coef +b.coef; //求系数的和
if(sum!= 0.0)
{
a.coef = sum;
ha.next =qa;
ha=qa;
qa=qa.next;
qb=qb.next;
}
else
{
qa=qa.next; //指向下一节点
qb=qb.next;
}
break;
case 1:
ha.next=qb; //多项式LB中当前结点的指数值小
ha=qb;
qb=qb.next;
break;
}
}
ha.next=(qa!=null?qa:qb); //插入剩余节点
return LA;
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Scanner sc =new Scanner(System.in);
System.out.println("请输入A多项式的项数:");
int m =sc.nextInt();
System.out.println("请分别输入多项式A各项的系数和指数:");
PolynList LA =new PolynList(m);
System.out.println("请输入B多项式的项数:");
int n =sc.nextInt();
System.out.println("请分别输入多项式A各项的系数和指数:");
PolynList LB =new PolynList(n);
LA = LA.addPolyn(LA, LB);
System.out.println("求和后的多项式各项为:");
LA.display();
}
public void 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();
}
}
}
}