一元稀疏多项式加法运算

描述:

设计一个一元稀疏多项式加法运算器,完成多项式a和b相加,建立多项式a+b。

输入说明:

一组输入数据,所有数据均为整数。第1行为2个正整数n,m,其中 n表示第一个多项式的项数,m表示第二个多项式的项数;第2行包含2n个整数,每两个整数分别表示第一个多项式每一项的系数和指数;第3行包含2m个整数,每两个整数分别表示第二个多项式每一项的系数和指数。(注:序列按指数升序排列)

输出说明:

在一行以类多项式形式输出结果,指数按从低到高的顺序。注意,系数值为1的非零次项的输出形式中略去系数1,如1x^2的输出形式为x^2,-1 x^2的输出形式为-x^2。

输入样例:

6 2

1 0 1 1 1 2 1 3 1 4 2 5

-1 3 -2 4

输出样例:

1+x+x^2-x^4+2x^5

下面贴上我写的代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     int a1[1000];
 6     int a2[1000];
 7     memset(a1,0,sizeof(a1));    //将a1数组所有元素初始化为0
 8     memset(a2,0,sizeof(a2));    //将a2数组所有元素初始化为0
 9     int n,m;
10     int t1,t2;       //每次取两个数,t1为系数,t2为相应的指数
11     scanf("%d %d",&n,&m);
12     for(int i=0;i<n;i++)        //将第一个式子保存在a1中,a1的每个元素表示式子的一个项,
13     {                           //元素的值为项的系数,元素下标为项的指数
14         scanf("%d %d",&t1,&t2);
15         a1[t2]=t1;
16     }
17     for (int i=0;i<m;i++)       //将第二个式子保存在a2中
18     {
19         scanf("%d %d",&t1,&t2);
20         a2[t2]=t1;
21     }
22     bool flag=true;             //flag标记当前项否是“和式”的第一项,flag为true时表示当前项是“和式”的第一项
23     for(int i=0;i<1000;i++)     //i表示项的指数,从0开始扫描
24     {
25         int k=a1[i]+a2[i];      //k为两个式子中指数为i的项的系数的和
26         if(k!=0)          //“和式”中有指数为i的项
27         {
28             if(i==0)            //如果此项的指数为0
29             printf("%d",k);
30             else if(i==1)       //如果此项的指数是1
31             {
32                 if(k==-1)       //如果此项的指数是1,且系数是-1
33                 printf("-X");
34                 else if(k==1)   //如果此项的指数是1,且系数是1
35                 flag ? printf("X") : printf("+X");
36                 else            //如果此项的指数是1,系数不是-1或1
37                 !flag&&k>0 ? printf("+%dX",k) : printf("%dX",k);
38             }
39             else                //如果此项的指数大于1
40             {
41                 if(k==-1)       //如果此项的指数大于1,且系数是-1
42                 printf("-X^%d",i);
43                 else if(k==1)   //如果此项的指数大于1,且系数是1
44                 flag ? printf("X^%d",i) : printf("+X^%d",i);
45                 else            //如果此项的指数大于1,且系数不是-1或1
46                 !flag&&k>0 ? printf("+%dX^%d",k,i) : printf("%dX^%d",k,i);
47             }
48             flag=false;
49         }
50     }
51     printf("\n");
52     return 0;
53 }

******

时间: 2024-11-11 09:11:48

一元稀疏多项式加法运算的相关文章

多项式加法运算 使用链表实现

/* 多项式加法运算 使用链表实现 */ #include <iostream> using namespace std; //使用不带头结点的单向链表,按照指数递减的顺序排列 typedef struct PolyNode { int coef; //系数 int expon; //指数 PolyNode *link; //指向下一个节点的指针 }*polynomial, npolynomial; polynomial PolyAdd(polynomial p1, polynomial p2

[DataStructure]多项式加法与乘法--B.链表存储(适用于零元系数多的多项式)

数据结构大作业…… 发出来大家乐呵乐呵…… 一.问题描述 给出N个多项式,求他们的和与积 二.解题报告 基本思想:加法和乘法都是把得数项直接链接在链表后面,最后统一做一个Merge&Sort工作即可.方便又快捷. (1)建立存储结构 1 struct _Poly 2 { 3 int factor;//系数 4 int Index;//幂 5 struct _Poly* next;//下一节点 6 }; 7 _Poly* poly[MAXTIMES+1]; 8 int Sum[MAXTIMES+1

[DataStructure]多项式加法与乘法--A.数组存储(适用于零元系数少的多项式)

数据结构大作业…… 发出来大家乐呵乐呵…… 一.问题描述 给出N个多项式,求他们的和与积 二.解题报告 (1)建立存储结构 1 struct _Poly 2 { 3 double Data[MAXTIMES+1]; 4 int Times; 5 }; 6 struct _Poly Poly[N+1]; (2)主程序架构 1 int main() 2 { 3 int Sum; 4 cout<<"请输入要做运算的多项式数量"<<endl; 5 cin>>

[PAT] 一元多项式的乘法与加法运算 C语言实现

[PAT] 02-线性结构1 一元多项式的乘法与加法运算 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数.数字间以空格分隔,但结尾不能有多余空格.零多项式应输出0 0. 输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 输出

SCOI2013 多项式的运算 (BZOJ 3323)

似乎仍然不能附传送门..权限题T_T... 3323: [Scoi2013]多项式的运算 Time Limit: 12 Sec  Memory Limit: 64 MB Description 某天,mzry1992 一边思考着一个项目问题一边在高速公路上骑着摩托车.一个光头踢了他一脚,摩托车损坏,而他也被送进校医院打吊针.现在该项目的截止日期将近,他不得不请你来帮助他完成这个项目.该项目的目的是维护一个动态的关于x 的无穷多项式F(x) = a0 * x^0 + a1 * x^1 + a2 *

数据结构之利用单向链表实现多项式加法和乘法

在<数据结构与算法分析--c语言描述>一书中,作者指出了使用单向链表作为实现多项式的方法.但是没有给出具体实现.下面自己对其进行实现.只考虑功能.对其他细节不暂时不考虑.程序完成两个功能,使用单向链表完成多项式的加法和乘法.首先看加法,解决加法问题的思想在于对表示进行操作的两个链表表示的多项式按照指数递减的结构排列,每个节点的数据域存储着多项式某一项的系数(Coefficient)和指数(Exponent),还有一个指向后继节点的指针.节点的实现如下: 1 typedef struct Nod

南邮OJ 1005 多项式加法

题目描述:线性表是一种最简单.最基本,也是最常用的数据结构,其用途十分广泛,例如,用带表头结点的单链表求解一元整系数多项式加法和乘法运算.现给两个一元整系数多项式,请求解两者之和. 题目链接:点击打开链接 代码是借鉴别人的,链接:点击打开链接 <span style="font-size:18px;">#include <iostream> using namespace std; class nodeList; class Node //单链表节点 { pri

02-线性结构2 一元多项式的乘法与加法运算 (20 分)

02-线性结构2 一元多项式的乘法与加法运算 (20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数.数字间以空格分隔,但结尾不能有多余空格.零多项式应输出0 0. 输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 输

7-22 一元多项式的乘法与加法运算 (20 分)

7-22 一元多项式的乘法与加法运算 (20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数.数字间以空格分隔,但结尾不能有多余空格.零多项式应输出0 0. 输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 输出样例: