您的位置:首页 > 编程语言 > Java开发

Java实现数组形式的多项式加法、减法、乘法、相除运算

2010-02-21 12:11 1306 查看
java实现的多项式加法,减法,乘法,除法运算,其中多项式的表示形式为按幂从低到高的系数数组,数组的长度即是多项式的幂

即 数组{1,2,3,4} 表示多项式4x3+3x2+2x+1

运算在工具类Polyn中进行 初始化Polyn必须要传两个参数 即被除数和除数

其中加法,减法和乘法是静态方法 不需实例即可使用

除法需要产生商和余数 所以必须要实例化后才可进行运算

除法的算法大致是:

1、用被除数的最大项除以除数最大项,得多项式p1

2、用p1乘除数,得多项式p2

3、被除数减p2,得p3

4、如果p3的幂小于除数,则输出余数为p3,商为所有p1之和

否则以p3作为新的被除数,转1

初步写的程序如下,没做错误处理和全方位测试,留以后有时间进行。

]/**
*
* @author knightzhuwei
*
*/
import java.util.Arrays;

class Polyn{
private double[] dividend;
private double[] divisor;
private double[] result;
private double[] remainder;

public Polyn(double[] dividend,double[] divisor){
this.dividend=dividend;
this.divisor=divisor;
}
//加法 逐项相加 没啥好说的
public static double[] addPolyn(double[] a,double[] b){
double[] heigher=a.length>b.length?a:b;
double[] lower=a.length>b.length?b:a;
double[] res=new double[heigher.length];
for(int i=0;i<heigher.length;i++){
if(i<lower.length){
res[i]=heigher[i]+lower[i];
}
else{
res[i]=heigher[i];
}
}
return res;
}

//减法 逐项想减 稍麻烦一些 最后如果高位是0还要处理
public static double[] subPolyn(double[] a,double[] b){
double[] heigher=a.length>=b.length?a:b;
double[] lower=a.length>=b.length?b:a;
double[] res=new double[heigher.length];
if(heigher==a){
for(int i=0;i<heigher.length;i++){
if(i<lower.length){
res[i]=heigher[i]-lower[i];
}
else{
res[i]=heigher[i];
}
}
}else{
for(int i=0;i<heigher.length;i++){
if(i<lower.length){
res[i]=lower[i]-heigher[i];
}
else{
res[i]=-heigher[i];
}
}
}
int k=res.length-1;
for(;res[k]==0.0&&k>0;k--);
double[] newres=new double[k+1];
for(int m=0;m<newres.length;m++){
newres[m]=res[m];
}
return newres;
}

//乘法 两个循环各项遍乘
public static double[] mulPolyn(double[] a,double[] b){
double[] res=new double[a.length+b.length-1];
for(int i=0;i<a.length;i++){
for(int j=0;j<b.length;j++){
res[i+j]+=a[i]*b[j];

}
}
return res;
}

//除法 最为复杂一些
public void devPolyn(){
if(dividend.length<divisor.length){
result=new double[]{0};
remainder=dividend;
}else{
double[] a=dividend;
double[] b=divisor;
double[] res=new double[]{0};
while(a.length>=b.length){
int num=a.length-b.length;
double[] temp=new double[num+1];
for(int i=0;i<num;i++){
temp[i]=0;
}
temp[num]=a[a.length-1]/b[b.length-1];
res=addPolyn(temp, res);
double[] c=mulPolyn(b, temp);
a=subPolyn(a, c);
}
remainder=a;
result=res;
}
}
public double[] getResult() {
if(result==null){
devPolyn();
}
return result;
}
public double[] getRemainder() {
if(remainder==null){
devPolyn();
}
return remainder;
}
}
public class PolynTest {

public static void main(String[] args) {
double[] a={0,15,3};
double[] b={0,3};
Polyn p=new Polyn(a,b);
System.out.println(Arrays.toString(p.getResult()));
System.out.println(Arrays.toString(p.getRemainder()));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐