02-线性结构1 一元多项式的乘法与加法运算
来源:互联网 发布:wps office for linux 编辑:程序博客网 时间:2024/06/06 05:12
02-线性结构1 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
输入样例:
4 3 4 -5 2 6 1 -2 03 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 15 20 -4 4 -5 2 9 1 -2 0
突然发现自己链表不会写了
#include <stdio.h>#include <stdlib.h> typedef struct node{int coefficient;int exponent;struct node * next;} PolyNode, *Polynomial;Polynomial ReadPoly();void Attach(int c, int e, Polynomial * Rear);Polynomial MultPoly(Polynomial P1, Polynomial P2);Polynomial AddPoly(Polynomial P1, Polynomial P2);void PrintPoly(Polynomial P);int main(int argc, char const *argv[]){Polynomial Poly1, Poly2, PolySum, PolyMul;Poly1 = ReadPoly();Poly2 = ReadPoly();PolyMul = MultPoly(Poly1, Poly2);PrintPoly(PolyMul);PolySum = AddPoly(Poly1, Poly2);PrintPoly(PolySum);return 0;}Polynomial ReadPoly(){Polynomial P, Rear, temp;P = (PolyNode*)malloc(sizeof(PolyNode));P->next = NULL;Rear = P;int N, c, e;scanf("%d", &N);while(N--){scanf("%d %d", &c, &e);Attach(c, e, &Rear);}temp = P;P = P->next; free(temp);return P;}void Attach(int c, int e, Polynomial * pRear){Polynomial P;P = (PolyNode*)malloc(sizeof(PolyNode));P->coefficient = c;P->exponent = e;P->next = NULL;(*pRear)->next = P;*pRear = P;}Polynomial MultPoly(Polynomial P1, Polynomial P2){Polynomial P, temp1, temp2, Rear, temp;int c, e;if(!P1 || !P2)return NULL;temp1 = P1;temp2 = P2;P = (PolyNode*)malloc(sizeof(PolyNode));P->next = NULL;Rear = P;while(temp2){c = temp1->coefficient * temp2->coefficient;e = temp1->exponent + temp2->exponent;if(c != 0){Attach(c, e, &Rear);temp2 = temp2->next;}}temp1 = temp1->next;while(temp1){temp2 = P2, Rear = P;while(temp2){c = temp1->coefficient * temp2->coefficient;e = temp1->exponent + temp2->exponent;if(c != 0){while(Rear->next && Rear->next->exponent > e)Rear = Rear->next;if(Rear->next && Rear->next->exponent == e){if(Rear->next->coefficient + c)Rear->next->coefficient += c;else{temp = Rear->next;Rear->next = temp->next;free(temp);}}else{temp = (PolyNode*)malloc(sizeof(PolyNode));temp->coefficient = c;temp->exponent = e;temp->next = Rear->next;Rear->next = temp;Rear = Rear->next;}temp2 = temp2->next;}}temp1 = temp1->next;}temp = P;P = P->next;free(temp);return P;}Polynomial AddPoly(Polynomial P1, Polynomial P2){Polynomial P, temp1, temp2, Rear, temp;if(!P1 && !P2){if(!P1)return P2;elsereturn P1;}P = (PolyNode*)malloc(sizeof(PolyNode));P->next = NULL;Rear = P;temp1 = P1;temp2 = P2;while(temp1 && temp2){if(temp1->exponent > temp2->exponent){if(temp1->coefficient){Attach(temp1->coefficient, temp1->exponent, &Rear);}temp1 = temp1->next;}else if(temp1->exponent == temp2->exponent){if(temp1->coefficient + temp2->coefficient){Attach(temp1->coefficient + temp2->coefficient, temp1->exponent, &Rear);}temp1 = temp1->next;temp2 = temp2->next;}else{if(temp2->coefficient){Attach(temp2->coefficient, temp2->exponent, &Rear);}temp2 = temp2->next;}}while(temp1){Attach(temp1->coefficient, temp1->exponent, &Rear);temp1 = temp1->next;}while(temp2){Attach(temp2->coefficient, temp2->exponent, &Rear);temp2 = temp2->next;}temp = P;P = P->next;free(temp);return P;}void PrintPoly(Polynomial P){int flag = 0;if(!P){printf("0 0");}while(P){if (!flag)flag = 1;elseprintf(" ");printf("%d %d", P->coefficient, P->exponent);P = P->next;}printf("\n");}
0 0
- 线性结构2 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 数据结构 PAT 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算 (20分)
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算[网易云课堂-数据结构]
- 02-线性结构1 一元多项式的乘法与加法运算 -数据结构
- [PAT] 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算
- PAT 02-线性结构2 一元多项式的乘法与加法运算 (java)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算
- Android之Handler用法总结
- 《c语言从入门到精通》看书笔记——第4章 运算符与表达式
- HTML5 媒体元素--------video
- C和C++的关系
- win10安装oracle 11g 时出现INS-13001环境不满足最低要求
- 02-线性结构1 一元多项式的乘法与加法运算
- 文章标题
- C++ Runtime Error :STL list "list iterator not incrementable"
- 《c语言从入门到精通》看书笔记——第5章 常用的数据输入输出函数
- C语言头文件应用 --- 写一个CMD
- VS集成Qt环境搭建
- 南昌大学软院大神养成计划----与用户交流
- 充电好快!小米20000mAh移动电源评测
- Android LayerDrawable 和 Drawable.Callback