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

输入格式:

输入分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. [原创]cocos2d-x研习录-第三阶 特性之按键与虚拟键盘

    Cocos2D-x引擎支持按键事件,它能检测设备的键盘输入并处理相应的事件.而基于不同操作系统的移动设备,可供用户操作的按键数量和功能都存在差异.   Cocos2D-x使用CCKeypadDeleg ...

  2. android studio 插件

    引用于:http://www.zhihu.com/question/28026027 adb-idea 支持直接在AS面板中进行ADB操作,个人觉得太实用,上面有哥们已提及,这里再介绍下: Unins ...

  3. 获取本机IP

    Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault<IPAddress>(a => a.AddressFam ...

  4. IOS-指定返回Modal的控制器presentViewController

    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:NO completion: ...

  5. 事件驱动之Twsited异步网络框架

    在这之前先了解下什么是事件驱动编程 传统的编程是如下线性模式的: 开始--->代码块A--->代码块B--->代码块C--->代码块D--->......--->结 ...

  6. 工具04_SQL Trace/DBMS_SYSTEM

    2014-06-25 Created By BaoXinjian

  7. svn-git

    1.创建版本库 # svnadmin create proj 2.修改配置文件  Auth文件    [groups]    admin=shguo    [/]    @admin=rw    *= ...

  8. linux备份mysq脚本

    filename=`date +%Y%m%d_%H%M%S`database=finebwservername=officialcreatefilename=${servername}_${datab ...

  9. Java计算上下基线

    public class GetAverageandStandardDevition { static List<Long> list = new ArrayList<Long> ...

  10. github代码集合(转载)

    菜鸟新闻项目课程源码  https://github.com/yxs666/cniao5-news SwipeRefreshLayout + RecyclerView 下拉刷新和上拉加载更多 http ...