1643: 线性表-两个多项式之和(Hard ver)
金币值:2
定数:10
时间限制:1.000 s
内存限制:128 M
正确:2
提交:5
正确率:40.00% 命题人:
题目描述
一元多项式的求和操作在链式存储结构上的实现。其中函数initList用于完成链表的初始化;locateElem用于寻找待插入结点的前驱结点;listInsert用于结点的插入;addMutiPloy用于实现计算两个一元多项式的和;printList的功能是从单链表头部开始顺序打印单链表中的结点元素。
#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef int Status; typedef struct LNode { double coef; int expn; struct LNode *next; } LNode, *linkList; Status initList(li nkList &L); li nkList locateElem (li nkList L,int e); void listInsert(li nkList &L,double coef,int expn); void addMutiPloy(li nkList &pa,li nkList pb); void printList(li nkList L); int main(void) { li nkList pa,pb; int n,i,expn; double coef; initList(pa); initList(pb); scanf("%d",&n); for(i=1; i<=n; i++) { scanf("%lf%d",&coef,&expn); listInsert(pa,coef,expn); } scanf("%d",&n); for(i=1; i<=n; i++) { scanf("%lf%d",&coef,&expn); listInsert(pb,coef,expn); } addMutiPloy(pa,pb); printList(pa); return 0; } Status initList(li nkList &L) { L=(li nkList)malloc(sizeof(LNode)); if(!L) exit(OVERFLOW); L->next=NULL; return OK; } void listInsert(li nkList &L,double coef,int expn) { li nkList p=(li nkList)malloc(sizeof(LNode)); if(!p) exit(OVERFLOW); p->coef=coef; p->expn=expn; p->next=NULL; li nkList t=locateElem(L,expn); p->next=t->next; t->next=p; } /*仅提交以下代码*/ li nkList locateElem (li nkList L,int e) { } void addMutiPloy(li nkList &pa,li nkList pb) { } void printList(li nkList L) { }
输入格式
输入数据各行是:
第1行:第一个多项式的项数
第2行:第一个多项式的各项系数和指数,以空隔间隔
第3行:第二个多项式的项数
第4行:第二个多项式的各项系数和指数,以空隔间隔
第1行:第一个多项式的项数
第2行:第一个多项式的各项系数和指数,以空隔间隔
第3行:第二个多项式的项数
第4行:第二个多项式的各项系数和指数,以空隔间隔
输出格式
两多项式之和,根据指数从高到低输出(系数精确到小数后1位),如果多项式之和为0,则显示0
输入样例 复制
4
7 7 5 5 1 1 3 3
3
6 6 2 2 4 4
输出样例 复制
7.0 7
6.0 6
5.0 5
4.0 4
3.0 3
2.0 2
1.0 1