#include <stdio.h> #include "stdlib.h" void product(float p[],float q[],float r0[]) { r0[0]=p[0]*q[0]; r0[2]=p[1]*q[1]; r0[1]=p[0]*q[1]+p[1]*q[0]; } void plus(float p[],float q[],float c[],int k) { int i; for(i=0;i<k;i++) c[i]=p[i]+q[i]; } void mins(float p[],float q[],int n) { int i; for(i=0;i<n;i++) p[i]=p[i]-q[i]; } void poly_product(float p[],float q[],float r0[],int n) { if(n==2) product(p,q,r0); else { int k=n/2; float *r1,*r2,*r3; r1=malloc((2*n-1)*sizeof(float)); r2=malloc((2*n-1)*sizeof(float)); r3=malloc((2*n-1)*sizeof(float)); for(int i=0;i<2*n-1;i++) r1[i]=r2[i]=r3[i]=0; poly_product(p,q,r0,k); //递归将p0*q0存于r0中0--2*k-2 poly_product(p+k,q+k,r0+2*k,k); //递归将p1*q1存于r0中2*k--4*k-2 plus(p,p+k,r1,k); //将p0+q1存于r1中 plus(q,q+k,r2,k); //将q0+q1存于r2中 poly_product(r1,r2,r3,k); //将r1*r2存于r3中 mins(r3,r0,2*k-1); //求出r3 mins(r3,r0+2*k,2*k-1); plus(r0+k,r3,r0+k,k); plus(r0+2*k,r3+k,r0+2*k,k-1); free(r1); free(r2); free(r3); } } int main(int argc, const char * argv[]) { int i; float p[4]={1,2,3,4}; float q[4]={4,3,2,1}; float r0[7]; poly_product(p,q,r0,4); for (i=0;i<7;i++)printf("%0.0f ",r0[i]); printf("\n"); return 0; }
多项式相乘
猜你喜欢
转载自blog.csdn.net/qq_31631167/article/details/51178810
今日推荐
周排行