[PAT] 02-线性结构2 一元多项式的乘法与加法运算
来源:互联网 发布:文华贵金属行情软件 编辑:程序博客网 时间:2024/05/14 03:30
[PAT] 02-线性结构2 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和。
输入格式说明:
输入分2行。每行分别先给出多项式非零项的个数。再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式说明:
输出分2行。分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。
数字间以空格分隔,但结尾不能有多余空格。
例子输入与输出:
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 2 2 1 2 1 0
2 1 2 -1 0 1 4 -1 0
2 2 3 2 -1000 1000 1000 0
2 1000 1000 -1000 0 -1000000 2000 2000000 1000 -1000000 0
0 0 4 0
1 999 1000 0 0
999 1000
C语言单链表实现
#include <stdio.h>#include <stdlib.h>typedef struct node *PolyNode;struct node{ int coef; int expo; PolyNode pnode;};PolyNode readPoly(){ PolyNode p,tmp,rear; int n,c,e; scanf("%d",&n); p = (PolyNode)malloc(sizeof(struct node)); p->coef=p->expo=0; p->pnode=NULL; rear = p; if(n==0){ return p; } while(n--){ scanf("%d %d",&c,&e); tmp = (PolyNode)malloc(sizeof(struct node)); tmp->coef=c; tmp->expo=e; rear->pnode=tmp; tmp->pnode=NULL; rear=tmp; } return p;}int printPoly(PolyNode p){ int flag=0; if(!(p->pnode)){ printf("0 0\n"); return 0; }else{ p=p->pnode; } while(p){ if(!flag){ flag+=1; }else{ printf(" "); } printf("%d %d",p->coef,p->expo); p=p->pnode; } printf("\n"); return 0;}void attach(int coef, int expo, PolyNode *pRear){ PolyNode tmp; tmp = (PolyNode)malloc(sizeof(struct node)); tmp->coef=coef; tmp->expo=expo; tmp->pnode=NULL; (*pRear)->pnode=tmp; *pRear = tmp;}PolyNode mult(PolyNode p1, PolyNode p2){ PolyNode p,Rear,t1,t2,t; int c, e; t1 = p1->pnode; t2 = p2->pnode; p = (PolyNode)malloc(sizeof(struct node)); p->coef = p->expo = 0; p->pnode = NULL; Rear = p; if(!t1||!t2)return p; while(t2){ c = t1->coef*t2->coef; e = t1->expo+t2->expo; attach(c,e,&Rear); t2 = t2->pnode; } t1=t1->pnode; while(t1){ t2=p2->pnode;Rear=p; while(t2){ c = t1->coef*t2->coef; e = t1->expo+t2->expo; while(Rear->pnode&&Rear->pnode->expo>e){ Rear = Rear->pnode; } if(Rear->pnode&&Rear->pnode->expo==e){ if(Rear->pnode->coef+c){ Rear->pnode->coef+=c; }else{ t = Rear->pnode; Rear->pnode = t->pnode; free(t); } }else{ t = (PolyNode)malloc(sizeof(struct node)); t->coef = c; t->expo = e; t->pnode = Rear->pnode; Rear->pnode = t; Rear=Rear->pnode; } t2=t2->pnode; } t1=t1->pnode; } return p;}int compare(int a,int b){ if(a>b)return 1; if(a==b)return 0; return -1;}PolyNode plus(PolyNode p1, PolyNode p2){ PolyNode p,rear,tmp; int sum; p = (PolyNode)malloc(sizeof(struct node)); p->pnode=NULL; rear=p; p1=p1->pnode; p2=p2->pnode; while(p1&&p2) switch(compare(p1->expo,p2->expo)){ case 1: attach(p1->coef,p1->expo,&rear); p1=p1->pnode; break; case -1: attach(p2->coef,p2->expo,&rear); p2=p2->pnode; break; case 0: sum = p1->coef+p2->coef; if(sum)attach(sum,p1->expo,&rear); p1=p1->pnode; p2=p2->pnode; break; } for(;p1;p1=p1->pnode)attach(p1->coef,p1->expo,&rear); for(;p2;p2=p2->pnode)attach(p2->coef,p2->expo,&rear); rear->pnode=NULL; return p;}int main(){ PolyNode mul,plu,p1,p2; p1 = readPoly(); p2 = readPoly(); mul = mult(p1,p2); plu = plus(p1,p2); printPoly(mul); printPoly(plu); return 0;}
0 0
- [PAT] 02-线性结构2 一元多项式的乘法与加法运算
- PAT 02-线性结构2 一元多项式的乘法与加法运算 (java)
- 线性结构2 一元多项式的乘法与加法运算
- 数据结构 PAT 02-线性结构1 一元多项式的乘法与加法运算
- PAT数据结构_02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 线性结构2 一元多项式的乘法与加法运算 浙大pat
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- [数据结构]02-线性结构2 一元多项式的乘法与加法运算
- open和fopen
- vi/vim 光标移动命令
- 算法
- ajax之(3)ajax跨域
- NGUI用onSelect检测(监听)Input 控件失焦(非选中状态)
- [PAT] 02-线性结构2 一元多项式的乘法与加法运算
- ThinkPHP3.2中使用第三方库(phpQuery)
- 自定义android开机动画
- 符号表和类型系统的代码实现
- 【数据库】从mysql迁移到sqlserver
- 网络爬虫的六种方式
- dos下常用命令
- 渗透工具之TOR(洋葱头)之windows篇
- 在Android 中调用选择图片、视频、添加音频、录音、拍摄视频、拍照等其他的功能【转】