7-2 一元多项式的乘法与加法运算 (20 分) (链表实现)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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{
//结构,用来存放多项式结点
int coef;//系数
int expon;//指数
struct PolyNode * next;
}Node, *pNode;
typedef struct poly{
//结构,用来表示多项式
pNode front;//指向多项式的第一项
pNode rear;//指向多项式的最后一项
}Poly, *pPoly;
Poly create(int coef, int expon);//创建仅含一个系数为coef指数为expon的结点的多项式并将其返回
void attach(int coef, int expon, pPoly p);//将一个系数为coef指数为expon的结点附在多项式p后
Poly addpoly(Poly p1, Poly p2);//两多项式相加,并将结果多项式返回
Poly nodemulpoly(Node node, Poly p);//用多项式中的一项乘以另一个多项式p,返回结果多项式
Poly mulpoly(Poly p1, Poly p2);//将多项式p1与多项式p2相乘,返回结果多项式
void printpoly(Poly p);//输出多项式p
int main() {
int n1, n2;
scanf("%d", &n1);
int c = 0, e = 0;
Poly p1 = create (c, e);
if (n1) {
//这里需要注意,n1或n2可能为零
scanf("%d %d", &c, &e);
p1 = create(c, e)<