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

输入格式说明:

输入分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切片练习

    这块儿没什么难的,细心一点就好 L = [] n = 1 while n <= 99: L.append(n) n = n + 2 print(L) #但是在Python中,代码不是越多越好,而 ...

  2. Java 操作mongodb

    package cn.test.db; import java.io.File; import java.io.IOException; import java.net.UnknownHostExce ...

  3. RSA, ACS5.X 集成配置

    目的是RSA和ACS集成,ACS作为RADIUS服务器提供二次验证服务. ①配置RSA SecurID Token Servers   按照如下网址配置: http://www.cisco.com/c ...

  4. 转载纯真ip库

    http://blog.csdn.net/clin003/archive/2007/08/14/1743157.aspx 利用 QQWry.Dat 实现 IP 地址高效检索(PHP) 根据 LumaQ ...

  5. 深夜,用canvas画一个时钟

    深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...

  6. pythonxy 安装

    安装Numpy,发现错误: No module named msvccompiler in numpy.distutils; trying from distutils 目前python除了在 Win ...

  7. STL 源代码剖析 算法 stl_algo.h -- partition

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie partition ------------------------------------ ...

  8. ExtJS学习第一天 MessageBox

    此文用来记录学习笔记: •学习任何技术,首先都要从Helloworld开始,那么我们首要任务就是写一个简单的HelloWorld程序,带领同学们走进ExtJS的世界. •Ext.onReady:这个方 ...

  9. hdu2289Cup(神坑题,精度+二分,以半径二分不能过,以高度为二分就过了)

    Problem Description The WHU ACM Team has a big cup, with which every member drinks water. Now, we kn ...

  10. javascript 学习随笔3

    <html> <head> <script type="text/javascript"> function startTime() { var ...