5-1 一元多项式的乘法与加法运算 (20分)
来源:互联网 发布:红帽子linux官方下载 编辑:程序博客网 时间:2024/06/05 11:06
PTA 链表
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
#include<stdio.h>#include<stdlib.h>
struct Node{
int coef;
int expo;
struct Node* Next;
};
typedef struct Node* PrtNode;
typedef PrtNode List;
List init();
int Insert(List L,int coef,int expo);
int main(){
List L1,L2,L3,L4,p;
int n,m,i;
int coef,expo;
int tmp=0,flag;
int t;
L1=init();L2=init();L3=init();L4=init();scanf("%d",&n);for(i=0;i<n;i++){ scanf("%d",&coef); scanf("%d",&expo); if(coef==0){ expo=0; } flag=Insert(L1,coef,expo); if(!flag)return 0;}scanf("%d",&m);for(i=0;i<m;i++){ scanf("%d",&coef); scanf("%d",&expo); if(coef==0){ expo=0; } int flag=Insert(L2,coef,expo); if(!flag)return 0;}
//muti
List p3,p4,front,rear,q;
p3=L1->Next;
p4=L2->Next;
while(p3){
while(p4){
coef=(p3->coef)*(p4->coef);
expo=(p3->expo)+(p4->expo);
flag=Insert(L4,coef,expo);
if(!flag)return 0;
p4=p4->Next;
}
p3=p3->Next;
p4=L2->Next;
}
for(rear=L4->Next;rear!=NULL;rear=rear->Next){
q=rear;
for(front=rear->Next;front!=NULL;){
if(front->expo==rear->expo){
rear->coef=rear->coef+front->coef;
p=front;
front=front->Next;
q->Next=p->Next;
free(p);
continue;
}
q=q->Next;
front=front->Next;
}}for(rear=L4->Next;rear!=NULL;rear=rear->Next){ for(front=rear->Next;front!=NULL;front=front->Next){ if(front->expo>rear->expo){ t=rear->coef; rear->coef=front->coef; front->coef=t; t=rear->expo; rear->expo=front->expo; front->expo=t; } }}for(p=L4->Next;p!=NULL;){ if(tmp){ printf(" "); tmp=0; } else{ if(p->coef!=0){ printf("%d %d",p->coef,p->expo); tmp=1; } if(p->coef==0&&p->Next==NULL){ printf("0 0"); } p=p->Next; } }if(n==0)printf("0 0");printf("\n");tmp=0;//add List p1,p2; p1=L1->Next; p2=L2->Next; while(p1&&p2){ if(p1->expo < p2->expo){ expo=p1->expo; coef=p1->coef; flag=Insert(L3,coef,expo); if(!flag)return 0; p1=p1->Next; continue; } else if(p1->expo > p2->expo){ expo=p2->expo; coef=p2->coef; flag=Insert(L3,coef,expo); if(!flag)return 0; p2=p2->Next; continue; } else{ expo=p2->expo; coef=p2->coef+p1->coef; flag=Insert(L3,coef,expo); if(!flag)return 0; p1=p1->Next; p2=p2->Next; continue; } } for(;p1!=NULL;p1=p1->Next){ expo=p1->expo; coef=p1->coef; flag=Insert(L3,coef,expo); if(!flag)return 0; } for(;p2!=NULL;p2=p2->Next){ expo=p2->expo; coef=p2->coef; flag=Insert(L3,coef,expo); if(!flag)return 0; } for(rear=L3->Next;rear!=NULL;rear=rear->Next){ q=rear; for(front=rear->Next;front!=NULL;){ if(front->expo==rear->expo){ rear->coef=rear->coef+front->coef; p=front; front=front->Next; q->Next=p->Next; free(p); continue; } q=q->Next; front=front->Next; }}for(rear=L3->Next;rear!=NULL;rear=rear->Next){ for(front=rear->Next;front!=NULL;front=front->Next){ if(front->expo>rear->expo){ t=rear->coef; rear->coef=front->coef; front->coef=t; t=rear->expo; rear->expo=front->expo; front->expo=t; } }} for(p=L3->Next;p!=NULL;){ if(tmp){ printf(" "); tmp=0; } else{ if(p->coef!=0){ printf("%d %d",p->coef,p->expo); tmp=1; } if(p->coef==0&&p->Next==NULL){ printf("0 0"); } p=p->Next; } }return 0;
}
List init(){
List L=(List)malloc(sizeof(struct Node));
if(!L){
return NULL;
}
L->coef=0;
L->expo=0;
L->Next=NULL;
return L;
}
int Insert(List L,int coef,int expo){
List p;
p=(List)malloc(sizeof(struct Node));
if(!p)return 0;
if(coef==0&&expo!=0){
return 1;
}
p->coef=coef;
p->expo=expo;
p->Next=L->Next;
L->Next=p;
return 1;
}
“`
- 一元多项式的乘法与加法运算(20 分)
- 一元多项式的乘法与加法运算(20 分)
- 一元多项式的乘法与加法运算(20 分)
- 一元多项式的乘法与加法运算(20 分)
- 5-1 一元多项式的乘法与加法运算 (20分)
- 5-2 一元多项式的乘法与加法运算 (20分)
- 5-2 一元多项式的乘法与加法运算 (20分)
- 5-2 一元多项式的乘法与加法运算 (20分)
- 5-2 一元多项式的乘法与加法运算 (20分)
- 5-2 一元多项式的乘法与加法运算 (20分)
- 5-2 一元多项式的乘法与加法运算 (20分)
- 5-2 一元多项式的乘法与加法运算 (20分) (单向链表)
- 02-线性结构1 一元多项式的乘法与加法运算 (20分)
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的加法与乘法运算
- 一元多项式的乘法与加法运算
- Educational Codeforces Round 10 D Nested Segments
- Rest使用
- windows计算程序运行时间
- 安卓中WebView内存泄漏等问题
- win7 xshell 缺失mfc110.dll
- 5-1 一元多项式的乘法与加法运算 (20分)
- collection---List
- Apple Pay的一些介绍
- centos supervisor + ss
- Android 上多方式定位元素(python)
- MFC-自绘控件(checkbox篇)
- CocoaPods的使用
- mapreduce中的setup()与cleanup()的使用
- 参考了别人的暴力代码 自己的错误在与 思路并不复杂 但是自己的map并没有请空 这个错误 要改