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

输入格式:

输入分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. 迭代器模式(Iterator Pattern)

    迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 迭代器模式(Iterator)就是分离了聚合对象的遍历行为,抽象出一个迭代器来负责这样既可以 ...

  2. JSBinding / Plugins & Build Mozjswrap Library

    There are 2 libraries in Plugins: mozjs-31. This is SpiderMonkey library, built from https://github. ...

  3. .net framework 3.5 序列化

    1.JSON序列化. 首先,引用程序集 System.Runtime.Serialization, 我们要使用System.Runtime.Serialization.Json,默认点不出来,这应该是 ...

  4. Java命名规范基础

    一.java命名规范 1.类和接口:由多个单词组成时,所有单词的首字母大写,如TestJava 2.变量名和方法(函数):由多个单词组成时,所有第一个单词的首字母小写,之后每一个单词的首字母大写,如: ...

  5. DB SQL Monitor 阻塞及等待事件监控工具

    SQL Monitor Designed By zhaoguan wang 说明------------------------------------------------------------ ...

  6. es6 ... 表达

    ... 包含0个或n个属性, { ...state.counters [id]: state.counters[id] - 1 } 只改变其中的id相对应的属性,其他保持不变

  7. javascript中无法通过div.style.left获取值的问题

    一.问题总结: 样式必须直接写在元素内部才能通过div.style.left直接获取属性值(也就是必须是内联样式才行),定义在css中的样式不能通过这种方式获取. 让元素移动到200停止 setTim ...

  8. HTML 代码复用实践 (静态页面公共部分提取复用)

    原文:HTML 代码复用实践 上面的链接里面安装配置步骤已经非常详细,这里主要记录我操作过程中遇到的几个问题 gulp-file-include 的使用     按上面的步骤安装之后,node_mod ...

  9. hdu 5382 GCD?LCM!

    先考虑化简f函数 发现,f函数可以写成一个递归式,化简后可以先递推求出所有f函数的值, 所以可以先求出所有S函数的值,对于询问,O(1)回答 代码: //File Name: hdu5382.cpp ...

  10. mint安装相关数据库lib

    sudo apt-get install libmysqlclient-dev sudo apt-get install sqlite3 libsqlite3-dev