设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分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>
typedef struct PolyNode *Polynomial;
struct PolyNode
{
int coef;
int expon;
struct PolyNode *next;
}; Polynomial ReadPoly();
void Attach(int c,int e,Polynomial *pReal);
Polynomial Add(Polynomial P1,Polynomial P2);
Polynomial Mult(Polynomial P1,Polynomial P2);
void PrintPoly(Polynomial P); int main()
{
Polynomial P1,P2,PMult,PSum;
P1 = ReadPoly();
P2 = ReadPoly();
PMult = Mult(P1,P2);
PrintPoly(PMult);
PSum = Add(P1,P2);
PrintPoly(PSum);
return ;
}
Polynomial ReadPoly()
{
Polynomial P,Rear,t;
int c,e,N;
scanf("%d",&N);
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->next = NULL;
Rear = P;
while(N--){
scanf("%d %d",&c,&e);
Attach(c,e,&Rear);
}
t = P;
P = P->next;
free(t);
return P;
}
void Attach(int c,int e,Polynomial *pReal)
{
Polynomial P;
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->coef = c;
P->expon = e;
P->next = NULL;
(*pReal)->next = P;
*pReal = P;
} Polynomial Add(Polynomial P1,Polynomial P2)
{
Polynomial P,t1,t2,t,Rear;
if(!P1 && !P2){
if(!P1)
return P2;
else
return P1;
}
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->next = NULL;
Rear = P;
t1 = P1;
t2 = P2;
while(t1 && t2){
if(t1->expon == t2->expon){
if(t1->coef + t2->coef)
Attach(t1->coef + t2->coef,t1->expon,&Rear);
t1 = t1->next;
t2 = t2->next;
}
else if(t1->expon > t2->expon){
if(t1->coef)
Attach(t1->coef,t1->expon,&Rear);
t1 = t1->next;
}
else{
if(t2->coef)
Attach(t2->coef,t2->expon,&Rear);
t2 = t2->next;
}
}
while(t1){
if(t1->coef)
Attach(t1->coef,t1->expon,&Rear);
t1 = t1->next;
}
while(t2){
if(t2->coef)
Attach(t2->coef,t2->expon,&Rear);
t2 = t2->next;
}
t = P;
P = P->next;
free(t);
return P;
}
Polynomial Mult(Polynomial P1,Polynomial P2)
{
Polynomial P,t1,t2,t,Rear;
int c,e;
if(!P1 || !P2)
return NULL;
t1 = P1;
t2 = P2;
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->next = NULL;
Rear = P;
while(t2){
if(t1->coef * t2->coef){
Attach(t1->coef * t2->coef,t1->expon + t2->expon,&Rear);
}
t2 = t2->next;
}
t1 = t1->next;
while(t1){
t2 = P2;
Rear = P;
while(t2){
e = t1->expon + t2->expon;
c = t1->coef * t2->coef;
while(Rear->next && Rear->next->expon > e)
Rear = Rear->next;
if(Rear->next && Rear->next->expon == e){
if(Rear->next->coef + c)
Rear->next->coef += c;
else{
t = Rear->next;
Rear->next = t->next;
free(t);
}
}
else{
if(c){
t = (Polynomial)malloc(sizeof(struct PolyNode));
t->coef = c;
t->expon = e;
t->next = Rear->next;
Rear->next = t;
Rear = Rear->next;
}
}
t2 = t2->next;
}
t1 = t1->next;
}
t2 = P;
P = P->next;
free(t2);
return P;
}
void PrintPoly(Polynomial P)
{
int flag = ;
if(!P)
printf("0 0");
while(P){
if (!flag)
flag = ;
else
printf(" ");
printf("%d %d", P->coef, P->expon);
P = P->next;
}
printf("\n");
}

需注意的点:需系数为0时的处理!

乘法运算实现方法即多项式逐项相乘的手算方法,将所得单项结果有序插入第一个多项式第一项与第二个多项式所得的多项式P中。

 

线性结构CT 02-线性结构1 一元多项式的乘法与加法运算的更多相关文章

  1. 线性结构2 一元多项式的乘法与加法运算 【STL】

    02-线性结构2 一元多项式的乘法与加法运算(20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和 ...

  2. PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)

    原题地址 https://pta.patest.cn/pta/test/15/exam/4/question/710 5-2 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的 ...

  3. PTA数据结构 习题3.6 一元多项式的乘法与加法运算 (20分)

    一元多项式的乘法与加法运算 https://pintia.cn/problem-sets/434/problems/5865 设计函数分别求两个一元多项式的乘积与和. 时间限制:200 ms 内存限制 ...

  4. PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  5. 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)

    题目链接:http://pat.zju.edu.cn/contests/ds/3-04 设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行.每行分别先给出多项式非零项的个数.再以指数 ...

  6. 浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算

    设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分 ...

  7. 一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  8. 一元多项式的乘法与加法运算(C语言)

    输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方 ...

  9. C语言 线性表 双向链式结构 实现

    一个双向链式结构实现的线性表 duList (GCC编译). /** * @brief 线性表双向链表结构 * @author wid * @date 2013-10-28 * * @note 若代码 ...

随机推荐

  1. IOS开发-phonegap上的数据库

    phonegap提供的本地数据库功能不可用,最终请教高手后使用SQLitePlugin插件来实现.网上很多都是介绍IOS插件如何编程,少有介绍如何使用插件: 一.插件安装: 1.下载,解压,复制以下文 ...

  2. Python计算程序运行时间

    方法1 import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.no ...

  3. 你很牛B,面试却没过,为什么?

    点击标题下「飞测」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是我们期 ...

  4. 使用HTTP协下载文件

    通过发送HTTP请求,下载文件 头文件: #ifndef __HTTP__ #define __HTTP__ #include <stdio.h> #include <stdlib. ...

  5. android大项目运行中出现问题汇总

    Android 项目中,特别是当项目文件和规模达到一定的程度后,会引发一些平常不常见的问题. 下面对遇到的一些问题做一个汇总和总结. scenario 1: 在项目中,我们采用了chromimum内核 ...

  6. SVN 外部引用(svn:externals)处理相似系统的公用代码

    一.创建外部引用 我们常常遇到这样一个场景,我们有两个系统,两个系统用的是同一套框架.如果我们用两套程序 去做,当我们修改这个公共的框架的时候,另外一个还是旧版本的,很容易造成混乱. SVN的外部用就 ...

  7. js中的条件语句

    //js中的条件语句 ; //example1 单分支语句 ){ console.log("你已经不年轻了!"); }else{ console.log("你依然很有活力 ...

  8. Loadrunner:安装LR11时提示缺少vc2005_sp1_with_atl_fix_redist

    [问题现象] 安装LR11时提示缺少vc2005_sp1_with_atl_fix_redist: [解决办法] 手动安装缺少的组件,LR安装包中已自带该组件,为何不自动捕捉异常去获取该自带的组件去安 ...

  9. hbase日常操作及维护

    一,基本命令: 建表:create 'testtable','coulmn1','coulmn2' 也可以建表时加coulmn的属性如:create 'testtable',{NAME => ' ...

  10. frame和iframe的区别

    转自:http://blog.csdn.net/lyr1985/article/details/6067026        CSDN 1.frame不能脱离frameSet单独使用,iframe可以 ...