多项式相乘的另一解法
来源:互联网 发布:视频软件管理条例2017 编辑:程序博客网 时间:2024/05/29 19:57
多项式相乘的另一解法是利用公式:
该图可以辅助说明算法思想
#include <stdio.h>#include <malloc.h>#define M 5 //第一个多项式阶数#define N 3 //第二个多项式阶数struct Po //多项式节点结构体{int coef; //项的系数 int exp; //项的幂struct Po *next;};typedef struct Po Po1;struct Podual //多项式双向链表结构体{int coef; //系数int exp; //幂struct Podual *next;struct Podual *before;};typedef struct Podual Podual1;void print(Po1 *head1); //重载函数,打印多项式void print(Podual1 *head2);void main(){Po1 *p1before, *q1after, *p1, *head1;Podual1 *q2after, *p2, *head2;int i, temp;head1=(Po1 *)malloc(sizeof(Po1));head1->next=NULL;q1after=head1;for(i=0; i<=M; i++) //建立第一个多项式{p1=(Po1 *)malloc(sizeof(Po1));p1->coef=i+1;p1->exp=i;p1->next=NULL;q1after->next=p1;q1after=p1;}printf("第一个多项式为:\n"); //输出第一个多项式print(head1);head2=(Podual1 *)malloc(sizeof(Podual1));head2->next=NULL;head2->before=NULL;q2after=head2; for(i=0; i<=N; i++) //建立第二个多项式{p2=(Podual1 *)malloc(sizeof(Podual1));p2->coef=i+1;p2->exp=i;p2->next=NULL;q2after->next=p2;p2->before=q2after;q2after=p2;}printf("第二个多项式为:\n"); //输出第二个多项式print(head2); Po1 *head3, *psnew3, *tail3;head3=(Po1 *)malloc(sizeof(Po1));head3->next=NULL; //初始化第三个多项式tail3=head3;p1before=head1->next;q1after=head1->next;q2after=head2->next;for(i=0; i<=M+N; i++) //依次求乘积多项式各项系数{temp=0;for(p1=p1before, p2=q2after; q1after->next!=p1; p1=p1->next, p2=p2->before){temp+=p1->coef*p2->coef; //累加求次数为i的项的系数}psnew3=(Po1 *)malloc(sizeof(Po1));psnew3->coef=temp;psnew3->exp=i;psnew3->next=NULL; //将求得的次数为i的项加入链表3tail3->next=psnew3;tail3=psnew3;if (i!=M+N){if(q1after->next!=NULL){q1after=q1after->next; //q1after未指向尾节点时继续向后递进}if(q2after->next!=NULL){q2after=q2after->next; //q2after未指向尾节点时继续向后递进}else{p1before=p1before->next; //q2after指向尾节点时p1before向后递进}}}printf("多项式一和多项式二的乘积为:\n"); //输出乘积多项式print(head3);}void print(Po1 *head1){Po1 *psnew1;psnew1=head1->next;while(psnew1!=NULL){if(psnew1!=head1->next){printf("+");printf("%dX^%d", psnew1->coef, psnew1->exp);}else{printf("%d", psnew1->coef);}psnew1=psnew1->next;}printf("\n\n");}void print(Podual1 *head2){Podual1 *psnew2;psnew2=head2->next;while(psnew2!=NULL){if(psnew2!=head2->next){printf("+");printf("%dX^%d", psnew2->coef, psnew2->exp);}else{printf("%d", psnew2->coef);}psnew2=psnew2->next;}printf("\n\n");}运行结果:
阅读全文
0 0
- 多项式相乘的另一解法
- 一元多项式的相乘
- 实现多项式相乘的程序
- 实现多项式相乘的程序
- 一元多项式的相加、相乘
- 多项式的相乘和相加
- 多项式相乘!
- 多项式相乘
- 多项式相乘
- 单链表表示的多项式相乘
- 链表实现的多项式相加相乘
- 【实验】一元多项式的相加与相乘
- 单链表实现多项式的相乘-c语言
- 数据结构-链表-多项式的相乘和相加
- 归纳链表题的另一类解法
- 【AekdyCoin】求多项式方程的一种解法
- 用链表实现多项式相乘
- 用单链表实现多项式相乘
- Idea注册码生成(有效期1年)
- 何凤文博客正式开通
- 4009.步步为赢
- 指针
- 完全掌握Android Data Binding
- 多项式相乘的另一解法
- Android中Canvas绘图方法的实现
- 堆栈溢出 Maximum call stack size exceeded
- POJ1949 Chores 解题报告【拓扑排序/DAG最长路】
- textarea使用注意
- ubuntu 下杀死进程的方式
- Head First HTML与CSS学习(10.09)
- CSS基础
- hdu 2066 一个人的旅行(Dijkstra)