首页 > 代码库 > 一元多项式的相乘(代码)
一元多项式的相乘(代码)
1 #include <iostream> 2 #include<stdlib.h> 3 4 using namespace std; 5 6 7 #define MAXSIZE 20 8 9 typedef struct LNode 10 { 11 int coef;//系数 12 int expn;//指数 13 struct LNode *next; 14 }LNode,*LinkList; 15 16 17 int CreateList_L(LinkList &L,int n) 18 { 19 LinkList p,q; 20 for(int i=0;i<n;i++) 21 { 22 p=(LinkList)malloc(sizeof(LNode)); 23 cout<<"输入元素系数:"; 24 cin>>p->coef; 25 cout<<"输入元素指数:"; 26 cin>>p->expn; 27 if(i==0)L=p; 28 else q->next=p; 29 q=p; 30 p->next=NULL; 31 } 32 return 0; 33 } 34 35 36 int LengthPolyn(LinkList L)//判断多项式的项数 37 { 38 int s=0; 39 while(L) 40 { 41 s++; 42 L=L->next; 43 } 44 return s; 45 } 46 47 48 int CopyList_L(LinkList La,LinkList &Lb)//开辟一段和La指向的空间一样的新的空间,并把La中各元素的值依次复制到Lb中 49 { 50 LinkList p,q,pa=La; 51 int n=LengthPolyn(La); 52 for(int i=0;i<n;i++) 53 { 54 p=(LinkList)malloc(sizeof(LNode)); 55 p->coef=pa->coef; 56 p->expn=pa->expn; 57 if(i==0)Lb=p; 58 else q->next=p; 59 q=p; 60 p->next=NULL; 61 pa=pa->next; 62 } 63 return 0; 64 } 65 66 67 68 int Display_L(LinkList L) 69 { 70 cout<<"f(x)="<<L->coef; 71 if(L->expn)cout<<"*"<<"x^"<<L->expn; 72 L=L->next; 73 while(L) 74 { 75 if(L->coef>0) 76 { 77 cout<<"+"; 78 cout<<L->coef<<"*"<<"x^"<<L->expn; 79 } 80 else cout<<L->coef<<"*"<<"x^"<<L->expn; 81 L=L->next; 82 } 83 return 0; 84 } 85 86 87 88 int AddPolyn(LinkList La,LinkList Lb,LinkList &Lc) 89 { 90 LinkList pa,pb,p; 91 int k=1; 92 pa=La;pb=Lb; 93 //确定“和多项式”的头结点 94 while(k) 95 { 96 if(pa->expn<pb->expn){p=Lc=pa;pa=pa->next;k=0;} 97 else if(pa->expn>pb->expn){p=Lc=pb;pb=pb->next;k=0;} 98 else 99 {100 pa->coef+=pb->coef;101 if(pa->coef)102 {103 p=Lc=pa;104 pa=pa->next;105 k=0;106 }107 else108 {109 pa=pa->next;110 pb=pb->next;111 if(!pa||!pb) break;112 }113 }114 }115 if(!pb&&pa){p=Lc=pa;pa=pa->next;}116 if(!pa&&pb){p=Lc=pb;pb=pb->next;}117 if(!pa&&!pb) Lc=NULL;118 //确定接下来的节点119 while(pa&&pb)120 {121 if(pa->expn<pb->expn){p->next=pa;p=pa;pa=pa->next;}122 else if(pa->expn>pb->expn){p->next=pb;p=pb;pb=pb->next;}123 else124 {125 pa->coef+=pb->coef;126 if(pa->coef)127 {128 p->next=pa;129 p=pa;130 pa=pa->next;131 pb=pb->next;132 }133 else134 {135 pa=pa->next;136 pb=pb->next;137 }138 139 }140 }141 while(!pb&&pa)142 {143 p->next=pa;144 p=pa;145 pa=pa->next;146 }147 while(!pa&&pb)148 {149 p->next=pb;150 p=pb;151 pb=pb->next;152 }153 return 0;154 }155 156 157 158 int MultiplyPolyn(LinkList La,LinkList Lb,LinkList &Lc)//La指向的多项式乘以Lb指向的多项式159 {160 LinkList pa,pb=Lb,l;161 int i=0,j,n;162 LNode *L[MAXSIZE];//指针数组,Lb至多MAXSIZE项!163 while(pb)164 {165 CopyList_L(La,L[i]);166 pa=L[i];167 while(pa)168 {169 pa->coef*=pb->coef;170 pa->expn+=pb->expn;171 pa=pa->next;172 }173 pb=pb->next;174 i++;175 }176 n=LengthPolyn(Lb);177 AddPolyn(L[0],L[1],Lc);178 for(j=2;j<n;j++)179 {180 AddPolyn(L[j],l,Lc);181 l=Lc;182 }183 return 0;184 }185 186 187 188 int main()189 {190 LinkList La,Lb,Lc;191 int m,n;192 cout<<"请输入La中的元素个数:";193 cin>>m;194 CreateList_L(La,m);195 cout<<"请输入Lb中的元素个数:";196 cin>>n;197 CreateList_L(Lb,n);198 MultiplyPolyn(La,Lb,Lc);199 Display_L(Lc);200 return 0;201 }
一元多项式的相乘(代码)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。