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

输入格式:

输入分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. python整理之(字符串、元组、列表、字典)

    一.关于字符串的整理总结 对于字符串的操作常用的有这些: 字符串的操作通过dir()函数可以查看 我们先整理没有下划线的用法,有下划线的暂时不去考虑. 1.capitalize 功能:使字符串的首字母 ...

  2. div模态层示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. C# 更新SQL Server数据库备注信息从另一数据库

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. C# 下载搜狗词库

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); string[] userAgent = new string[]{& ...

  5. C# 获取当前操作系统是32位还是64位

    注:判断整型的长度的方式,只有在AnyCPU编译模式下才有用.因此更好的办法是获取真的地址总线位宽(使用WMI,windows management instruementation). .NET 2 ...

  6. 处理大并发之五 使用libevent利器bufferevent

    转自:http://blog.csdn.net/feitianxuxue/article/details/9386843 处理大并发之五 使用libevent利器bufferevent 首先来翻译一段 ...

  7. springmvc配置servlet的拦截形式/*和/的区别

    今天复制一个现有的spring-mvc的项目修改配置作为新的项目,结果悲剧了!遇到了一个小问题困扰了半天,找同事找总监都没有搞定,纠结了半天终于发现了问题所在,随笔记一下,所谓好记性不如烂博客嘛! 问 ...

  8. Sphinx的配置和使用

    项目中用到了,昨天老大又给讲了讲,我感觉这玩意真是强大.想把一些功能以很小的代价做好,第三方的工具是必须要掌握的. 1. 我的开发环境在Windows上,下载了sphinx-2.2.6-release ...

  9. Linux运行与控制后台进程的方法:nohup, setsid, &, disown, screen

    我们经常会碰到这样的问题,用ssh登录了远程的Linux服务器,运行了一些耗时较长的任务,结果却由于网络等的不稳定导致任务中途失败.这是由于在用户注销(logout)或者网络断开时,终端会收到 HUP ...

  10. Python的第二天

    一.while循环语句 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句-- 执行 ...