如何实现这三个函数呢?
第一个函数输入两个数组,返回商.
第二个函数输入两个数组,返回余数.
第三个函数输入两个数组,返回最大公约式.
a[] = {3,0,2,1}a=3+2X^2+X^3,这样来表示多项式,不用链表
第一个函数输入两个数组,返回商.
第二个函数输入两个数组,返回余数.
第三个函数输入两个数组,返回最大公约式.
a[] = {3,0,2,1}a=3+2X^2+X^3,这样来表示多项式,不用链表
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;
}
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()));
}}