用单链表来实现多项式的加减乘,除就不做了,代码如下
public class Polynomial {
private Monomial first; // 首项
//添加单项式
public void append(Monomial monomial) {
if (monomial == null) {
// do nothing
} else if (first == null) {
first = monomial;
} else {
Monomial current = first;
while (current != null) {
// 青年人网站提示:如果指数相同,则相加
if (current.index == monomial.index) {
current.coefficient += monomial.coefficient;
break;
} else if (current.next == null) { // 否则直接扔到最后
current.next = monomial;
break;
}
current = current.next;
}
}
}
public void append(double c, int i) {
append(new Monomial(c, i));
}
public String toString() {
StringBuffer sb = new StringBuffer();
Monomial current = first;
while (current.next != null) {
sb
.append("(" + current.coefficient + "x^" + current.index
+ ") + ");
current = current.next;
}
sb.append("(" + current.coefficient + "x^" + current.index + ")");
return sb.toString();
}
// 两个多项式相加
public Polynomial add(Polynomial p2) {
Polynomial result = new Polynomial();
Monomial current = this.first;
while (current != null) {
result.append(current.coefficient, current.index); // 青年人网站提示:注意这里
current = current.next;
}
current = p2.first;
while (current != null) {
result.append(current.coefficient, current.index);
current = current.next;
}
return result;
}
// 两个多项式相减 this- p2
public Polynomial substract(Polynomial p2) {
Polynomial result = new Polynomial();
Monomial current = this.first;
while (current != null) {
result.append(current.coefficient, current.index); // 注意这里
current = current.next;
}
current = p2.first;
while (current != null) {
result.append(-current.coefficient, current.index);
current = current.next;
}
return result;
}
/**
* this * p2
*
* @return
*/
public Polynomial multiply(Polynomial p2) {
Polynomial result = new Polynomial();
Monomial c1 = this.first;
Monomial c2 = p2.first;
while (c1 != null) {
while (c2 != null) {
result.append(c1.coefficient * c2.coefficient, c1.index
+ c2.index);
c2 = c2.next;
}
c1 = c1.next;
c2 = p2.first;
}
return result;
}
public Polynomial divide(Polynomial p2) {
// todo 实现相除
return null;
}
public static void main(String[] args) {
Polynomial p1 = new Polynomial();
p1.append(2.2, 1);
p1.append(3.3, 2);
p1.append(4.111, 7);
System.out.println("p1: " + p1);
Polynomial p2 = new Polynomial();
p2.append(2.232, 5);
p2.append(3.444, 6);
p2.append(5.777, 1);
System.out.println("p2: " + p2);
Polynomial result = p1.add(p2);
System.out.println("加: " + result);
result = p1.substract(p2);
System.out.println("减: " + result);
result = p1.multiply(p2);
System.out.println("乘: " + result);
}
}
/**
* 单项式
*/
class Monomial {
double coefficient; // 系数
int index; // 指数
Monomial next; // 后继结点
public Monomial() {
}
public Monomial(double c, int i) {
this.coefficient = c;
this.index = i;
}
}
责任编辑:小草