02-线性结构2 一元多项式的乘法与加法运算 (20分)
2016-10-27 23:38
549 查看
设计函数分别求两个一元多项式的乘积与和。
输入格式: 输入分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
输入格式: 输入分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 Node *Polynomial; struct Node { int coef; int exp; Polynomial Next; }; Polynomial Read(); void Print(Polynomial P); Polynomial Mult(Polynomial P1, Polynomial P2); Polynomial Add(Polynomial P1, Polynomial P2); void attach(int c, int e, Polynomial *Pr); void pempty(Polynomial P); int main() { Polynomial P1, P2, Pa, Pm; P1 = Read(); P2 = Read(); Pm = Mult(P1, P2); Pa = Add(P1, P2); Print(Pm); Print(Pa); return 0; } Polynomial Read() { Polynomial Pn, p; int n, c, e; Pn = (Polynomial)malloc(sizeof(struct Node)); Pn->Next = NULL; p = Pn; scanf("%d", &n); while (n--) { scanf("%d%d", &c, &e); attach(c, e, &p); } return Pn; } void Print(Polynomial P) { int flag = 0; if (P->Next == NULL) printf("0 0"); else { while (P->Next) { if (flag) printf(" "); else flag = 1; P = P->Next; printf("%d %d", P->coef, P->exp); } } printf("\n"); } void attach(int c, int e, Polynomial *Pr){ Polynomial Prear; Prear = (Polynomial)malloc(sizeof(struct Node)); Prear->coef = c; Prear->exp = e; Prear->Next = NULL; (*Pr)->Next = Prear; (*Pr) = Prear; } Polynomial Add(Polynomial P1, Polynomial P2){ Polynomial Pa, p1, p2, p; Pa = (Polynomial)malloc(sizeof(struct Node)); p = Pa; p1 = P1->Next; p2 = P2->Next; while (p1 && p2) { if (p1->exp > p2->exp) { attach(p1->coef, p1->exp, &p); p1 = p1->Next; } else if (p1->exp < p2->exp) { attach(p2->coef, p2->exp, &p); p2 = p2->Next; } else { if((p1->coef + p2->coef) != 0) attach(p1->coef + p2->coef, p1->exp, &p); p1 = p1->Next; p2 = p2->Next; } } while (p1) { attach(p1->coef, p1->exp, &p); p1 = p1->Next; } while (p2) { attach(p2->coef, p2->exp, &p); p2 = p2->Next; } return Pa; } Polynomial Mult(Polynomial P1, Polynomial P2) { Polynomial Pm, p1, p2, p, pt, ptf; Pm = (Polynomial)malloc(sizeof(struct Node)); Pm->Next = NULL; p1 = P1->Next; p2 = P2->Next; if (!p1 || !p2) { return Pm; } while (p1) { ptf = (Polynomial)malloc(sizeof(struct Node)); p2 = P2->Next; if (ptf == NULL) printf("malloc error"); pt = ptf; while (p2) { attach(p1->coef * p2->coef, p1->exp + p2->exp, &pt); p2 = p2->Next; } Pm = Add(Pm, ptf); p1 = p1->Next; pempty(ptf); free(ptf); } return Pm; } void pempty(Polynomial P) { Polynomial pr, pt; pr = P->Next; while (pr) { pt = pr; pr = pr->Next; free(pt); } P->Next = NULL; }
相关文章推荐
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构1 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- PAT数据结构_02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算-中国大学MOOC-陈越、何钦铭-数据结构-2017秋
- 02-线性结构2 一元多项式的乘法与加法运算(20 分)
- 02-线性结构1 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算 PTA02-线性结构1
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算 -数据结构
- 02-线性结构2 一元多项式的乘法与加法运算(20 分)