设计函数分别求两个一元多项式的乘积与和。

输入格式说明:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式说明:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。

样例输入与输出:

序号 输入 输出
1
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
2 1 2 1 0
2 1 2 -1 0
1 4 -1 0
2 2
3
2 -1000 1000 1000 0
2 1000 1000 -1000 0
-1000000 2000 2000000 1000 -1000000 0
0 0
4
0
1 999 1000
0 0
999 1000
#include <iostream>
#include <algorithm>
#include <vector> using namespace std; typedef struct Term{
int coe;//系数
int exp;//指数
}Term; bool compare(Term a,Term b)
{
return a.exp>b.exp;
} /*
Term Mul(Term a,Term b)
{
a.coe = a.coe*b.coe;
a.exp = a.exp+b.exp;
return a;
}
*/ /*
Term Add(Term a,Term b)
{
a.coe +=b.coe;
return a;
}*/
void print(Term a)
{
cout<<a.coe<<" "<<a.exp<<" ";
}
int main()
{ vector<Term> vec1;
vector<Term> vec2;
vector<Term> vec;
vector<Term>::iterator it1,it2; int N1,N2;
int coe,exp;
bool flag = false;
Term t;
cin>>N1;
while(N1--)
{
cin>>coe>>exp;
t.coe = coe;
t.exp = exp;
vec1.push_back(t);
}
//for_each(vec1.begin(),vec1.end(),print);
//system("pause"); cin>>N2;
while(N2--)
{
cin>>coe>>exp;
t.coe = coe;
t.exp = exp;
vec2.push_back(t);
} //for_each(vec2.begin(),vec2.end(),print);
//system("pause"); for (it1=vec1.begin();it1!=vec1.end();it1++)
for (it2=vec2.begin();it2!=vec2.end();it2++)
{
t.coe = it1->coe * it2->coe;
t.exp = it1->exp + it2->exp;
if (t.coe!=0)
vec.push_back(t); } sort(vec.begin(),vec.end(),compare); for (it1 = vec.begin();it1!=vec.end();it1=it2)
{
for (it2 = it1+1;it2!=vec.end() &&it1->exp==it2->exp;it2++)
it1->coe += it2->coe;
if (it1->coe!=0)
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it1->coe<<" "<<it1->exp;
}
}
if (vec1.size()==0)
{
cout<<"0 0";
}
cout<<endl;
flag = false; for (it1=vec1.begin(),it2=vec2.begin();it1!=vec1.end()&&it2!=vec2.end();)
{
if (it1->exp >it2->exp)
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it1->coe<<" "<<it1->exp;
it1++;
}
else if (it1->exp < it2->exp)
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it2->coe<<" "<<it2->exp;
it2++;
}
else
{ if ((it1->coe+it2->coe))
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it1->coe+it2->coe<<" "<<it1->exp;
} it1++;
it2++;
}
} if (it1==vec1.end())
{
while(it2!=vec2.end())
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it2->coe<<" "<<it2->exp;
it2++;
}
} if (it2==vec2.end())
{
while(it1!=vec1.end())
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it1->coe<<" "<<it1->exp;
it1++;
}
} if (flag==false)
cout<<"0 0";
cout<<endl; //for_each(vec.begin(),vec.end(),print); //system("pause");
return 0;
}

//题目不难,注意细节即可

浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算的更多相关文章

  1. 浙江大学PAT上机题解析之1014. 福尔摩斯的约会 (20)

    1014. 福尔摩斯的约会 (20) 时间限制   50 ms 内存限制   32000 kB 代码长度限制   8000 B 判题程序     Standard     作者     CHEN, Y ...

  2. 浙江大学PAT上机题解析之1015. 德才论 (25)

    宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人 ...

  3. 浙江大学PAT上机题解析之5-05. QQ帐户的申请与登陆

    实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式说明: 输入首先给出一个正整数N(<=105),随后给出N行指令.每行指令的格式为:“命令符 ...

  4. 浙江大学PAT上机题解析之3-05. 求链式线性表的倒数第K项

    给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式说明: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理). 输出 ...

  5. 浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并

    已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3. 输入格式说明: 输入分2行,分别在每行给出由若干个正整数构成的非降序序列,用-1表示序列的结尾(-1不属于这个序列) ...

  6. 浙江大学PAT上机题解析之2-06. 数列求和

    给定某数字A(1<=A<=9)以及非负整数N(0<=N<=100000),求数列之和S = A + AA + AAA + … + AA…A(N个A).例如A=1, N=3时,S ...

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

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

  8. PAT甲题题解-1023. Have Fun with Numbers (20)-大数加法

    和1024一样都是大数据的题,因为位数最多要20位,long long最多19位给一个num,求sum=num+num问sum包含的数字,是否是num的一个排列,即数字都一样,只是顺序不同罢了. #i ...

  9. PAT上机注意事项

    PAT上机注意事项 这次上机PAT遇到了很多问题,进行一下总结 1.进入考场后,检查机器是否完好,尤其是键盘的键是否失灵,以及是否有打开的页面(考试开始,打开页面都算违规) 2.关于选择IDE 部分考 ...

随机推荐

  1. 经典排序算法及python实现

    今天我们来谈谈几种经典排序算法,然后用python来实现,最后通过数据来比较几个算法时间 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据 ...

  2. C函数调用与栈--代码真相

    前面详细的说了,C函数调用的过程中,栈的变化情况的原理部分,这里在看一下汇编代码的真正的实现. 有关前面的那一片博客,主要记住的就是函数调用时栈的变化,4+3+2的步骤: (1)设置栈帧边界 (2)开 ...

  3. [代码搜索]OpenGrok搭建简易教程

    面对着动辄几十GB且随时不断更新的大型代码,我们产生了以下需求:1.快速搜索代码2.代码存放于本地/服务器3.代码可跳转4.跨平台5.易于维护... 显然SourceInsight.ctags.gre ...

  4. Qt SQL Programming 部分翻译

    简介:      Qt SQL 是 Qt 的重要模块之一,为了方便,Qt 对 SQL 进行了一系列的封装,并将 SQL API 分为如下三层:      (1)驱动层      (2)SQL API ...

  5. 这些屌炸天的创业者为何对投资人说NO

    曾有人说,世上的创业者只分为两种,一种是找到投资的,一种是没有找到的. 但其实还有第三种,就是那些拒绝了投资人的创业者. 他们摒弃了投资人抛来的橄榄枝,并非不差钱,不接受投资的原因大体出于两个方面,一 ...

  6. 三个C++资源链接(大量)

    https://github.com/fffaraz/awesome-cpp http://blog.jobbole.com/78901/ https://github.com/programthin ...

  7. 关于sql 中 group by 和 having

    今天看到园里一篇文章(http://www.cnblogs.com/sheldon-lou/p/4881230.html)中面试中有关sql 查询方面的问题, 想想自己从上大学就学习数据库,到后来自己 ...

  8. 点菜系统 pickview的简单实用

    使用pickview的时候多想想tableview的使用,观察两者的相同之处 pickview的主要用途用于选择地区  生日年月日  和点餐 示例代码 简单的pickview点餐系统//  ViewC ...

  9. CSS3中的border-radius

    以前在CSS2的基础上做圆角还能算得上是门学问!!各种图片.各种嵌套(<精通CSS——高级web标准解决方案>中有介绍,过程在这就不说了,网上一查就查得到,总之就是:没用CSS3之前觉得很 ...

  10. if语句之求一元二次方程

    思路:1.首先明白什么叫做一元二次方程,当a不等于0的时候,此方程是一元二次方程 2.根据公式derta=b*b-4*a*c来判断根的情况 ①derta>0时,方程有两个不相等的实根 ②dert ...