博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PTA:一元多项式的加乘运算
阅读量:4055 次
发布时间:2019-05-25

本文共 3604 字,大约阅读时间需要 12 分钟。

线性结构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

其实我开始是看不懂输入和输出是什么的(捂脸~~~)

输入第一位表示多项式的项数,其后单数表示系数,双数表示指数,
如:4 3 4 -5 2 6 1 -2 0 表示3x^4-5x^2+6x^1-2x^0

然后放上代码

#include
#include
#include
using namespace std;//1.创建结构体,包含系数,指数,以及节点定义;//2.创建链表函数;//3.打印链表函数;//4.两个链表相加函数;//5.两个链表相乘函数;//6.主函数;struct polynomial{ int coef,expn;//coef表示系数,expn表示指数 polynomial* next;};polynomial* creat_list(int n){ polynomial *head,*r; head = new polynomial; r = head; int coef,expn; while(n--) { cin>>coef>>expn; polynomial* tmp = new polynomial; tmp->coef = coef; tmp->expn = expn; r->next = tmp; r = tmp; } r->next = NULL; return head;}void print_list(polynomial* n){ polynomial *c; int flag = 0; c = n->next; if(c==NULL) { cout<<0<<" "<<0; } while(c != NULL) { if(flag) cout<<" "; else flag = 1; cout<
coef<<" "<
expn; c = c->next; }}polynomial* add_list(polynomial*a,polynomial*b){ polynomial *fans,*ans; polynomial *ha,*hb; fans = new polynomial; ans = fans; ha=a->next; hb=b->next; while(ha&&hb) { polynomial *tmp =new polynomial; if(ha->expn > hb->expn) { tmp->expn = ha->expn; tmp->coef = ha->coef; ans->next = tmp; ans = tmp; ha = ha->next; } else if(hb->expn > ha->expn) { tmp->expn = hb->expn; tmp->coef = hb->coef; ans->next = tmp; ans = tmp; hb = hb->next; } else { int i = ha->coef+hb->coef; if(i!=0) { tmp->coef = i; tmp->expn = hb->expn; ans->next = tmp; ans = tmp; } ha = ha->next; hb = hb->next; } } while(ha) { polynomial *tmp = new polynomial; tmp->coef = ha->coef; tmp->expn = ha->expn; ans->next = tmp; ans = tmp; ha = ha->next; } while(hb) { polynomial *tmp = new polynomial; tmp->coef = hb->coef; tmp->expn = hb->expn; ans->next = tmp; ans = tmp; hb = hb->next; } ans->next = NULL; return fans;}polynomial* multi_list(polynomial *a,polynomial *b){ polynomial *ha,*hb; polynomial *ans,*fans; ha = a->next; hb = b->next; fans = creat_list(0); if((ha==NULL)||(hb==NULL)) { return fans; } polynomial*tmp; while(ha!=NULL) { tmp = new polynomial; ans = tmp; hb = b->next; while(hb!=NULL) { polynomial *ntmp = new polynomial; ntmp->coef = ha->coef*hb->coef; ntmp->expn = ha->expn+hb->expn; hb=hb->next; ans->next = ntmp; ans = ntmp; } ans->next = NULL;//由于ha,hb是递减排序,即ha的第一项与hb的每一项相乘得到一个指数递减的链表 fans = add_list(fans,tmp);//将每次while(hb){}后的链表进行迭代,化简多项式 ha = ha->next; } return fans;}int main(){ int n,m; cin>>n; polynomial *a = creat_list(n); cin>>m; polynomial *b = creat_list(m); polynomial *hc = multi_list(a,b); polynomial *hd = add_list(a,b); print_list(hc); cout<

转载地址:http://uwhci.baihongyu.com/

你可能感兴趣的文章
Redis持久化存储(AOF与RDB两种模式)
查看>>
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
redis sharding方案
查看>>
程序员最核心的竞争力是什么?
查看>>
Node.js机制及原理理解初步
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>