import java.util.LinkedList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
class Term {
private int exp; //指数 exponent
private int coef;//系数 coefficient
private String symbol ="X";
public Term(int coef, int exp){
setExp(exp);
setCoef(coef);
}
public void setExp(int exp){
this.exp = exp;
}
public void setCoef(int coef){
this.coef = coef;
}
public int getExp(){
return exp;
}
public int getCoef(){
return coef;
}
public String toString(){
String s = coef+"";
s += symbol;
s += "^" + exp;
return s;
}
}
class ExponentCompare implements Comparator{
public int compare(Term node1, Term node2){
if (node1.getExp()
return 1;
if (node1.getExp()>node2.getExp())
return -1;
return 0;
}
}
class Polynomial{
LinkedList polynomial;
public Polynomial(){ //构造方法
polynomial = new LinkedList();
}
// 多项式 p1, p2 相加 ,方法 返回相加的结果
public Polynomial add(Polynomial p1, Polynomial p2){
Polynomial p = new Polynomial();
for (int i=0;i
Term node = p2.search(p1.polynomial.get(i).getExp());
if (node==null)
p.addTerm(p1.polynomial.get(i).getCoef(), p1.polynomial.get(i).getExp());
else{
int n = node.getCoef() + p1.polynomial.get(i).getCoef();
p.addTerm(n ,p1.polynomial.get(i).getExp());
}
}
return p;
}
// 多项式 p1, p2 相乘 ,方法 返回相乘的结果
public Polynomial multiply(Polynomial p1, Polynomial p2){
Polynomial p = new Polynomial();
for (int i=0;i
for (int j=0;j
p.addTerm(p1.polynomial.get(i).getCoef()*p2.polynomial.get(j).getCoef(),
p1.polynomial.get(i).getExp() + p2.polynomial.get(j).getExp() );
return p;
}
public Term search(int n){ //查询指数为n的元素。查询不到,返回null
int size = polynomial.size();
for (int i=0;i
if ( polynomial.get(i).getExp() == n)
return polynomial.get(i);
return null;
}
public void addTerm(int coefficient, int exponent){
Term node = search(exponent);
if (node==null){
Term term = new Term(coefficient,exponent);
polynomial.add(term);
Collections.sort(polynomial, new ExponentCompare() );
} else{
node.setCoef(node.getCoef() + coefficient);
}
}
public String toString(){
String s = polynomial.get(0).toString();
for (int i=1;i
s += "+" + polynomial.get(i);
return s;
}
}
public class Test{
public static void main(String args[]){
Polynomial poly1 = new Polynomial();
Polynomial poly2 = new Polynomial();
Scanner input = new Scanner(System.in);
int i =1, co=0,ex=0;
System.out.println("注意:每一个多项式的数据输入完毕时,将系数项 输入0值。");
System.out.println("输入第一个多项式的数据");
while (true) {
System.out.print("第 " + i + " 项系数 (若键入 0,则终止这个多项式的数据输入):");
co = input.nextInt();
if (co==0) break;
System.out.print("第 " + i++ + " 项指数:");
ex = input.nextInt();
poly1.addTerm(co,ex);
}
System.out.println("输入的第一个多项式:" + poly1);
System.out.println("输入第二个多项式的数据");
i=1;
while (true) {
System.out.print("第 " + i + " 项系数 (若键入 0,则终止这个多项式的数据输入):");
co = input.nextInt();
if (co==0) break;
System.out.print("第 " + i++ + " 项指数:");
ex = input.nextInt();
poly2.addTerm(co,ex);
}
System.out.println("输入的第二个多项式:" + poly2);
System.out.println("这两个多项式之和:" + poly1.add(poly1,poly2));
System.out.println("这两个多项式的乘积:" + poly1.multiply(poly1,poly2));
}
}
输出:
注意:每一个多项式的数据输入完毕时,将系数项 输入0值。
输入第一个多项式的数据
第 1 项系数 (若键入 0,则终止这个多项式的数据输入):6
第 1 项指数:1
第 2 项系数 (若键入 0,则终止这个多项式的数据输入):5
第 2 项指数:0
第 3 项系数 (若键入 0,则终止这个多项式的数据输入):0
输入的第一个多项式:6X^1+5X^0
输入第二个多项式的数据
第 1 项系数 (若键入 0,则终止这个多项式的数据输入):4
第 1 项指数:1
第 2 项系数 (若键入 0,则终止这个多项式的数据输入):3
第 2 项指数:0
第 3 项系数 (若键入 0,则终止这个多项式的数据输入):0
输入的第二个多项式:4X^1+3X^0
这两个多项式之和:10X^1+8X^0
这两个多项式的乘积:24X^2+38X^1+15X^0