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
初步写的程序如下,没做错误处理和全方位测试,留以后有时间进行。
即 数组{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())); } }
相关文章推荐
- 一元多项式的加法和乘法运算(Java实现)——浙大数据结构(陈越)
- java单链表实现一元多项式加法和乘法运算
- 一元多项式的乘法与加法运算【Java实现--通过单项链表实现队列】
- Java常用数字工具类 大数乘法、加法、减法运算(2)
- (PHP实现)只使用++运算实现加法,减法,乘法,除法
- 剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现
- 多项式的加法和乘法算术运算的C++实现
- Java工作利器之常用工具类(二)——数字工具类-大数乘法、加法、减法运算
- 实现多个多项式的加法、减法、乘法
- 只使用++运算实现加法,减法,乘法,除法PHP实现
- 一元多项式的乘法与加法运算——链表实现
- 多项式乘法与加法运算(链表实现)
- java实现大整形加法、减法(还没有乘法和除法,目测除法会很难,乘法还凑合)
- Java 矩阵类 实现加法、减法和乘法
- 02-线性结构2 一元多项式的乘法与加法运算(20 分) 用结构数组的方法
- java第二周作业--实现矩阵的加法和乘法运算
- Java之计算机简单的加减乘除运算以及连续的加法,减法,乘法,除法运算
- 大数运算之加法乘法---JAVA实现
- 【Django】template中实现加减乘除数学运算[加法 减法 乘法 除法]
- 关于Django模板不能运算的临时解决办法 在Django 模板template 中实现加法,减法,乘法,除法运算