【算法】 一元多项式的乘法与加法运算
2019-02-09 15:37
120 查看
02-线性结构2 一元多项式的乘法与加法运算(20 分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
[code]#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Node{ int num1; //系数 int num2; //指数 绝对值均不超过1000 struct Node* Next; }node; node* CreatList(int total){ //创建的结构体是包含哨兵节点的结构体 int i; int xishu; int zhishu; node* head; node* temp; node* ptr; head=(node*)malloc(sizeof(node)); head->Next-NULL; ptr=head; for(i=0;i<total;i++){ temp=(node*)malloc(sizeof(node)); scanf("%d",&xishu); scanf("%d",&zhishu); temp->num1=xishu; temp->num2=zhishu; temp->Next=NULL; ptr->Next=temp; ptr=temp; } return head; } void InsertList(node* L,node* item){ node* temp; temp=L; while(temp->Next!=NULL){ if(item->num2==temp->Next->num2){ temp->Next->num1+=item->num1; break; } else if(item->num2<temp->Next->num2){ temp=temp->Next; } else{ item->Next=temp->Next; temp->Next=item; break; } } if(temp->Next==NULL){ temp->Next=item; } } node* MultiplyList(node* L1,node* L2){ node* L; node* p1; node* p2; node* p3; node* temp; L=(node*)malloc(sizeof(node)); L->Next=NULL; p3=L; p1=L1->Next; p2=L2->Next; while(p2!=NULL){ p1=L1->Next; while(p1!=NULL){ temp=(node*)malloc(sizeof(node)); temp->num1=(p1->num1)*(p2->num1); temp->num2=(p1->num2)+(p2->num2); temp->Next=NULL; InsertList(L,temp); p1=p1->Next; } p2=p2->Next; } return L; } node* AddList(node* L1,node* L2){ node* L; node* temp; node* p1,*p2,*p3; p1=L1->Next; p2=L2->Next; L=(node*)malloc(sizeof(node)); L->Next=NULL; p3=L; while(p1!=NULL||p2!=NULL){ temp=(node*)malloc(sizeof(node)); temp->Next=NULL; if((p1==NULL && p2!=NULL)){ temp->num1=p2->num1; temp->num2=p2->num2; p2=p2->Next; p3->Next=temp; p3=temp; continue; } if((p2==NULL &&p1!=NULL)){ temp->num1=p1->num1; temp->num2=p1->num2; p1=p1->Next; p3->Next=temp; p3=temp; continue; } if(p1!=NULL&&p2!=NULL&&p1->num2==p2->num2){ temp->num1=(p1->num1)+(p2->num1); temp->num2=p1->num2; p1=p1->Next; p2=p2->Next; } else if(p1->num2<p2->num2){ temp->num1=p2->num1; temp->num2=p2->num2; p2=p2->Next; } else if(p1->num2>p2->num2){ temp->num1=p1->num1; temp->num2=p1->num2; p1=p1->Next; } p3->Next=temp; p3=temp; } return L; } void PrintList(node* L){ node* P; int sign=1; P=L->Next; while(P!=NULL){ if(sign){ printf("%d %d",P->num1,P->num2); sign=0; } else{ printf(" %d %d",P->num1,P->num2); } P=P->Next; } } void FreeList(node* L){ node* p1,*p2; p1=L; p2=L->Next; while(p2){ free(p1); p1=p2; p2=p2->Next; } free(p2); } int main(void){ int total1,total2; node *L1,*L2; node *RL1,*RL2; scanf("%d",&total1); L1=CreatList(total1); scanf("%d",&total2); L2=CreatList(total2); RL1=MultiplyList(L1,L2); RL2=AddList(L1,L2); PrintList(RL1); printf("\n"); PrintList(RL2); FreeList(L1); FreeList(L2); FreeList(RL1); FreeList(RL2); return 0; }
相关文章推荐
- PAT 一元多项式的乘法与加法运算(20)(模拟计算过程)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 5-2 一元多项式的乘法与加法运算*(格式问题)
- pta 一元多项式的乘法与加法运算
- 3-04. 一元多项式的乘法与加法运算(20)
- 02-线性结构2 一元多项式的乘法与加法运算
- PTA 数据结构 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算(20 分)(CPP)
- ?5-2 一元多项式的乘法与加法运算
- [PTA] 线性结构2 一元多项式的乘法与加法运算(20 分)
- 一元多项式的加法和乘法运算(Java实现)——浙大数据结构(陈越)
- 02-线性结构1 一元多项式的乘法与加法运算 (20分)
- PTA习题 一元多项式的乘法与加法运算
- 线性结构2 一元多项式的乘法与加法运算
- 5-2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算(20 分) 用结构数组的方法
- 一元多项式的乘法与加法运算(20 分)
- 02-线性结构2 一元多项式的乘法与加法运算-中国大学MOOC-陈越、何钦铭-数据结构-2017秋