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

输入格式:

输入分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>

 /* run this program using the console pauser or add your own getch, system("pause") or input loop */

 /*
     定义链表结构
 */
 typedef struct Node *Ptrnomial;
 typedef Ptrnomial LinkList;  //头结点
 typedef Ptrnomial Position;//中间节点
 struct Node
 {
     int coef;  /*系数*/
     int expon;  /*指数*/
     Position link;
 };

 LinkList Read();
 void Print(LinkList L);
 LinkList Multiplication(LinkList L1,LinkList L2);    /*乘法*/
 LinkList Add(LinkList L1,LinkList L2);  /*加法*/

 int main(void)
 {
     LinkList L1,L2,L3,L4;
     L1 = Read();
     L2 = Read();
     L3 = Add(L1,L2);
     L4 = Multiplication(L1,L2);
     Print(L4);
     printf("\n");
     Print(L3);
     ;
 }
 LinkList Read()
 {
     int n,c,e;
     scanf("%d",&n);
     LinkList L,Rear,p;
     L = (Ptrnomial)malloc(sizeof(struct Node));
     Rear = L;
     while(n--)
     {
         p = (Ptrnomial)malloc(sizeof(struct Node));
         scanf("%d %d",&c,&e);
         p->coef = c;
         p->expon = e;
         Rear->link = p;
         Rear = p;
     }
     Rear->link = NULL;
     return L;
 }
 void Print(LinkList L)
 {
     LinkList L1;
     L1 = L->link;
     ;
     if( !L1 )    /*意思是L1为空时*/
     {
         printf("0 0");
         return ;
     }
     while( L1 )  /*意思是L1不为空时*/
     {
         if(!flag)
         {
             flag = ;
         }
         else
         {
             printf(" ");
         }
         printf("%d %d",L1->coef,L1->expon);
         L1 = L1->link;
     }
 }
 /*多项式相乘*/
 LinkList Multiplication(LinkList L1,LinkList L2)
 {
     Position l1,l2;
     LinkList l,temp,r,p;
     l1 = L1->link;
     l2 = L2->link;
     l = (struct Node*)malloc(sizeof(struct Node));
     l->link = NULL;
     if( !l1 || !l2)
     {
         return l;
     }
     while( l1 )
     {
         temp = (struct Node*)malloc(sizeof(struct Node));
         r = temp;
         l2 = L2->link;
         while( l2 )
         {
             p = (struct Node*)malloc(sizeof(struct Node));
             p->expon = l1->expon + l2->expon;
             p->coef = l1->coef * l2->coef;
             l2 = l2->link;
             r->link = p;
             r = p;
         }
         r->link = NULL;
         l = Add(l,temp);
         l1 = l1->link;
     }
     return l;
 }
 /*多项式相加*/
 LinkList Add(LinkList L1,LinkList L2)
 {
     int sum;
     Position l1, l2;
     LinkList l,r,p;
     l1 = L1->link;
     l2 = L2->link;
     l = (struct Node*)malloc(sizeof(struct Node));
     r = l;
     while( l1 && l2)
     {
         /*当两个多项式都存在时*/
         p = (struct Node*)malloc(sizeof(struct Node));
         if(l1->expon == l2->expon)
         {
             /*系数相等时*/
             sum = l1->coef + l2->coef;
             if( sum )
             {
                 p->expon = l1->expon;
                 p->coef = sum;
                 r->link = p;
                 r = p;
             }
             l2 = l2->link;
             l1 = l1->link;
         }
         else if(l1->expon < l2->expon)
         {
             p->expon = l2->expon;
             p->coef = l2->coef;
             l2 = l2->link;
             r->link = p;
             r = p;
         }
         else
         {
             p->expon = l1->expon;
             p->coef = l1->coef;
             l1 = l1->link;
             r->link = p;
             r = p;
         }
     }
     if( l2 == NULL)
     {
         while( l1 )
         {
             p = (struct Node*)malloc(sizeof(struct Node));
             p->expon = l1->expon;
             p->coef = l1->coef;
             l1 = l1->link;
             r->link = p;
             r =p ;
         }
     }
     if( l1 == NULL)
     {
         while( l2 )
         {
             p = (struct Node*)malloc(sizeof(struct Node));
             p->expon = l2->expon;
             p->coef = l2->coef;
             l2 = l2->link;
             r->link = p;
             r =p ;
         }
     }
     r->link = NULL;
     return l;
 }

PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)的更多相关文章

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

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

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

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

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

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

  4. 线性结构CT 02-线性结构1 一元多项式的乘法与加法运算

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分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. PAT线性结构_一元多项式求导、按给定步长反转链表、出栈序列存在性判断

    02-线性结构1. 一元多项式求导 (25) 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过100 ...

随机推荐

  1. c#事件机制

    namespace test { class Publisher//出版社 { public delegate void PubComputer(string magazineName);//声明事件 ...

  2. 安装Linux 16.04 时,选择好分区后,进到选择地点的界面后,总是闪退,退到最原始的界面

    这两天装 Linux 系统,总是遇到一个很蛋疼的问题: 当你累死累活把分区什么的都设置好了之后,在输入了系统名字,开机密码那几项之后,再选择地点的时候(如:选择 "上海"),然后就 ...

  3. maven 私服搭建

    1,下载 https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.2-01-bundle.zip 2,解压 3,安装 ...

  4. Ubuntu14.04用apt在线/离线安装CDH5.1.2[Apache Hadoop 2.3.0]-old

    用markdown重写,请稳步这里http://www.cnblogs.com/lion.net/p/5477899.html

  5. CDN(翻译)

    http://dojotoolkit.org/documentation/tutorials/1.10/cdn/index.html 从CDN上加载dojo模块时非常有用的.从CDN上加载Dojo并同 ...

  6. python---dnspython

    dnspython 是Python实现的一个DNS工具包,支持几乎所有的记录类型,可以用于查询,传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS).可以替代ns ...

  7. (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about t

    运行redis过程中,突然报错如下: (error) MISCONF Redis is configured to save RDB snapshots, but is currently not a ...

  8. [HTML5]HTML表单(Forms)

    表单是HTML最主要的用户输入元素 用户和网页的交互动作有鼠标悬停.点击链接(或移动触摸)和页面滚动等,这些交互方式一般只是服务器单向信息输出. 有时候用户需要输入一些信息给服务器来完成双向交互,这类 ...

  9. SparkConf加载与SparkContext创建(源码阅读一)

    即日起开始spark源码阅读之旅,这个过程是相当痛苦的,也许有大量的看不懂,但是每天一个方法,一点点看,相信总归会有极大地提高的.那么下面开始: 创建sparkConf对象,那么究竟它干了什么了类,从 ...

  10. 百度地图API地理位置和坐标转换

    1.由地名(省份.城市.街道等)得到其对应的百度地图坐标: http://api.map.baidu.com/geocoder/v2/?output=json&ak=你从百度申请到的Key&a ...