3-一元多项式的乘法
y1=3x^4-5x^2+6x-2、y2=5x^20-7x^4+3x,求y1*y2
怎么编程实现???
y=y1*y2=15x^24-25x^22+30x^21-10x^20-21x^8+35x^6-33x^5+14x^4-15x^3+18x^2-6x
思路:
当时的办法是先用y1的第一项乘以y2的每一项,每一个结果建立一个节点;再用y1的第二项乘以y2的每一项,每一个结果建立一个节点;.....
但是就会有一个问题,最后指数的大小不是递减的,而是乱序的
那么就只能再建立一个函数,这个函数的功能是把乱序的链表,根据指数递减的方式把它重新排列,但是排列不难,就是会遇到一个问题,如果链表中两个节点的指数是相同的,怎么解决???
这个问题一直没有解决,所以就只能换一种方法了。最后还是用的老师的方法
老师的方法:

Input
n----多少项
c--系数 e--指数
Ouput
c--系数 e--指数
没有代码怎么可以!!!
1 //一元多项式的乘法 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <stdbool.h> 6 7 typedef struct LNode *Link; 8 struct LNode{ 9 int coef; //系数 10 int expon; //指数 11 Link Next; //指向下一个节点的指针 12 }; 13 14 Link Read(){ 15 Link Rear,L,Temp; 16 int num,c,e; 17 18 L=(Link)malloc(sizeof(struct LNode)); 19 L->Next=NULL; 20 Rear=L; 21 scanf("%d\n",&num); 22 while(num--){ 23 scanf("%d %d",&c,&e); 24 Attach(c,e,&Rear); 25 } 26 27 Temp=L; 28 L=L->Next; 29 free(Temp); 30 return L; //返回多项式的头结点 31 } 32 33 void Attach(int c,int e,Link *pRear){ 34 Link K; 35 K=(Link)malloc(sizeof(struct LNode)); 36 K->coef=c; 37 K->expon=e; 38 K->Next=NULL; 39 (*pRear)->Next=K; 40 (*pRear)=K; 41 } 42 43 44 //实现多项式相乘 45 Link Mult(Link L1,Link L2){ 46 Link L,Rear,T1,T2,T; 47 int c,e; 48 49 if(!L1 || !L2){ //判断两个多项式是否为空,若为空,则返回 50 return NULL; 51 } 52 53 T1=L1,T2=L2; 54 L=(Link)malloc(sizeof(struct LNode)); 55 L->Next=NULL; 56 Rear=L; 57 58 while(T2){ 59 Attach(T1->coef*T2->coef,T1->expon+T2->expon,&Rear); 60 T2=T2->Next; 61 } 62 63 T1=T1->Next; 64 while(T1){ 65 T2=L2,Rear=L; 66 while(T2){ 67 c=T1->coef*T2->coef; 68 e=T1->expon+T2->expon; 69 while(Rear->Next && Rear->Next->expon>e){ 70 Rear=Rear->Next; 71 } 72 if(Rear->Next && Rear->Next->expon==e){ 73 if(Rear->Next->coef+c){ 74 Rear->Next->coef +=c; 75 }else{ //系数值为0 76 T=Rear->Next; 77 Rear=Rear->Next; 78 free(T); 79 } 80 }else{ 81 T=(Link)malloc(sizeof(struct LNode)); 82 T->coef=c; 83 T->expon=e; 84 T->Next=Rear->Next; 85 Rear->Next=T; 86 Rear=Rear->Next; 87 } 88 T2=T2->Next; 89 } 90 T1=T1->Next; 91 } 92 T1=L; 93 L=L->Next; 94 free(T2); 95 return L; 96 } 97 98 void Print(Link L){ 99 100 while(L){ 101 printf("%d --- %d\n",L->coef,L->expon); 102 L=L->Next; 103 } 104 } 105 106 int main(){ 107 Link L1,L2; 108 L1=Read(); 109 L2=Read(); 110 111 printf("\n"); 112 L1=Mult(L1,L2); 113 Print(L1); 114 } 115 116
浙公网安备 33010602011771号