链表应用之多项式相加
题目来源:Wejudge#3988
题目
首先输入2个整数m和n(0<m, n<=1000000000)分别代表2个多项式的项数。
然后,输入m+n行数据,前m行表示第一个多项式,后n行表示第二个多项式
每行1个整数c和一个非负整数e(e>=0),分别表示多项式每一项的系数和指数(指数按升序排列)。
样例
输入
3 4
1 1
2 3
3 5
1 0
-6 1
1 2
-3 5
输出
x+2x3+3x5
1-6x+x2-3x5
1-5x+x2+2x3
代码
#include<stdio.h>
#include<stdlib.h>typedef struct LNode{int coef,index; //数据域struct LNode *next; //指针域
}LNode,*LinkList; void create(LinkList &ll,int n);
void add(LinkList l1,LinkList l2,LinkList &L);
void print(LinkList L);int main(){int n,m;while(~scanf("%d %d", &n , &m)){LinkList l1,l2,l3;create(l1, n);create(l2, m);add(l1,l2,l3);print(l1);print(l2);print(l3);}return 0;
}void create(LinkList &ll,int n)
{ll=new LNode;LNode *l=ll;int a,b;while(n--){scanf("%d %d",&a,&b);if(a==0)continue;l->next=new LNode;l=l->next;l->coef=a,l->index=b;l->next=NULL;}
}
void add(LinkList l1,LinkList l2,LinkList &L)
{int cc=0;L=new LNode;LNode *p=L;l1=l1->next,l2=l2->next;while(l1&&l2){p->next=new LNode;if(l1->index<l2->index){//指数比较,小的先进行 ,l1小 p->next->coef=l1->coef;p->next->index=l1->index;l1=l1->next;} else if(l1->index==l2->index){//指数相同的相加 int u=l1->coef+l2->coef;if(u==0){//为0 p->next->coef=0;p->next->index=0;}else{//不为0 p->next->coef=u;p->next->index=l1->index;}l1=l1->next;l2=l2->next;}else{//l2小 p->next->coef=l2->coef;p->next->index=l2->index;l2=l2->next;}p=p->next;}while(l1){p->coef=l1->coef;p->index=l1->index;l1=l1->next;p->next=new LNode;p=p->next;}while(l2){p->coef=l2->coef;p->index=l2->index;l2=l2->next;p->next=new LNode;p=p->next;}p->next=NULL;
}
void print(LinkList L)
{int kk=0;while(L->next!=NULL){kk++;L=L->next;if(kk==1){//第一个数 if(L->coef==0){//a=0continue;}else if(L->coef==1){//a=1 剩下都有b是0 1 其他的情况 if(L->index==0){printf("%d",L->coef);//就是1 }else if(L->index==1){printf("x");}else{printf("x^%d",L->index);}}else{//a是其他情况 if(L->index==0){printf("%d",L->coef);}else if(L->index==1){printf("%dx",L->coef);}else{printf("%dx^%d",L->coef,L->index);}}} else{//不是第一个 if(L->coef>=0){//正数和0 if(L->coef==0){//a=0continue;}else if(L->coef==1){//a=1 剩下都有b是0 1 其他的情况 if(L->index==0){printf("+%d",L->coef);//就是1 }else if(L->index==1){printf("+x");}else{printf("+x^%d",L->index);}}else{//a是其他情况 if(L->index==0){printf("+%d",L->coef);}else if(L->index==1){printf("+%dx",L->coef);}else{printf("+%dx^%d",L->coef,L->index);}}}else{{ if(L->index==0){printf("%d",L->coef);}else if(L->index==1){printf("%dx",L->coef);}else{printf("%dx^%d",L->coef,L->index);}}}}}printf("\n");
}
链表应用之多项式相加相关推荐
- MFC版链表实现稀疏多项式相加减
链表实现多项式运算(加减)MFC可视化版 题目 设计一个一元稀疏多项式简单计算器. 基本要求 (1)输入并建立两个多项式: (2)多项式a与b相加,建立和多项式c: (3)多项式a与b相减,建立差多项 ...
- 链表应用——多项式相加
f(X)=1+x+x2+x5 g(X)=x3+x6+x8+x100 f(X)+g(X)=1+x+x2+x3+x5+x6+x8+x100 两个有序多项式相加合并问题: 显然第一个想到的是用数组解决,可仔 ...
- 链表应用 多项式相加
用链表实现多项式相加 #include<iostream> #include<cstdio> #include<malloc.h> #define flag -1 ...
- 【数据结构笔记07】不带头结点链表实现多项式相加、相乘
本次笔记内容: 2.4 多项式的加减运算实现 P24 1.题意理解与多项式表示 P25 2.程序框架及读入多项式 P26 3.加法.乘法运算及多项式输出 文章目录 多项式加法运算 采用不带头结点的单项 ...
- 数据结构(Java):用单链表实现多项式相加
要求: 1.已知有两个多项式Pn(x)和Qm(x),并且在Pn(x)和Qm(x)中指数相差很多,设计算法,求Pn(x)+Qm(x) 2.进行加法运算时不重新开辟存储空间. //定义节点类 class ...
- 多项式相加减【数据结构实验报告】
实验名称:实验一 多项式加减法 学号:*** 姓名:gnosed 实验日期:2017.10.16 一.实验目的 通过实现多项式的加减法,对链表有更深入的了解 二.实验具体内容 1.实验题目1: (1) ...
- 求两个多项式相加的和(数据结构cpp)
(萌新写代码,欢迎各位大佬多多指教!) 假设我们已知多项式 A: B: 现在要求解这两个多项式的和. 第一步:用什么方式储存多项式?需要储存的数据有多项式的系数和指数, ...
- 多项式相加的C语言实现
#include <stdio.h> #include <stdlib.h>//定义结构体类型 typedef struct Node{float xishu; //定义系数为 ...
- E. DS线性表—多项式相加
[id:24][20分]E. DS线性表-多项式相加 题目描述 对于一元多项式 p(x)=p0+p1x+p2x2+ - +pnxn ,每个项都有系数和指数两部分,例如p2x2的系数为p2,指数为2. ...
最新文章
- 11.如何在非固定大小的地图图片上正确渲染ROS小车的位置和运行轨迹
- 虚拟机里安装Linux系统出现乱码
- 2014年第五届蓝桥杯 - 省赛 - C/C++大学A组 - G. 蚂蚁感冒
- 计算机研发部门职责,计算机研发岗位职责
- java impala_Java实现impala操作kudu
- iOS屏幕旋转 浅析
- 通信网真的面临容量危机?
- 水性喷涂胶行业调研报告 - 市场现状分析与发展前景预测
- MATLAB学习笔记
- 当我在浏览器输入 www.baiu.com 之后发生了什么
- 机器学习数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- PD runner下载和使用教程
- 【题解】食物链(并查集)
- 高并发点赞系统 梳理
- 电脑硬盘怎样合并分区?
- STM32H743使用PA0,PA1作为ADC输入的坑!!
- java从倒数第n个指定字符串开始截取到最后
- 你还在用notifyDataSetChanged? 你已经out了
- ubuntu 18.04检查服务器异常重启的日志
- [USACO Nov08]玩具toys解题报告