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

输入格式说明:

输入分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. CocoaPods对于不同Target引入不同的第三方库Podfile的写法

    有的时候我们需要建立多个Target来完成不同的测试环境的区分,而多个Target之间可能会有第三方库的不同引用,如果我们在使用CocoaPods管理我们的第三方库的时候,我们就需要思考我们需要如何实 ...

  2. Extjs 3.0 htmleditor实现插入图片功能

    首先感谢前辈们的无私奉献.贴出参考地址 http://zhidao.baidu.com/link?url=Q0ZM405OFNy_xAHSut9TepRJxgXCxFayQttrQz1N82dlA1_ ...

  3. 1 初级.net web工程师,在工作中都做些什么

    初级.Net Web工程师,在工作中都做些神马?   职责 初级.Net Web工程师的主要职责,就是按比较详细的要求去完成代码. 比较详细的要求是指:一般会把页面式样.功能的描述.数据库结构.性能要 ...

  4. QTcpSocket通信编程时阻塞与非阻塞的问题

    目标,qt程序作为客户端,windows下winsock作为服务器端,实现两端通信. 开始时写了一个小函数测试: [cpp] view plaincopy QTcpSocket tmpSock;  t ...

  5. How many integers can you find(容斥+dfs容斥)

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  6. CentOS 6.4安装(超级详细图解教程)

    链接地址:http://www.osyunwei.com/archives/5855.html CentOS 6.4安装(超级详细图解教程) 附:CentOS 6.4下载地址 32位:http://m ...

  7. ORACLE的执行计划

    转自:http://www.cnblogs.com/lovingprince/archive/2007/12/07/2166400.html 背景知识:        为了更好的进行下面的内容我们必须 ...

  8. 将 Excel 数据导入 MySql

    能承受上万数据量,速度快,并且使用了事务,不会出现某条数据错误而导致部分数据插入(要是全部成功要是一条都不成功,测试过程中没出现失败),需要的朋友可以参考下 1.NPOI 2.MySql.Data 这 ...

  9. mysql版sql助记

    新建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; [host 中 使用 % 为通配符, 匹配任意远程主机] 赋权 GRANT p ...

  10. POJ 3675 Telescope 简单多边形和圆的面积交

    这道题得控制好精度,不然会贡献WA  QAQ 还是那个规则: int sgn(double x){ if(x > eps) return 1; else if(x < - eps) ret ...