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

输入格式说明:

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

输出格式说明:

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

样例输入与输出:

序号 输入 输出
1
  1. 4 3 4 -5 2 6 1 -2 0
  2. 3 5 20 -7 4 3 1
  1. 15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
  2. 5 20 -4 4 -5 2 9 1 -2 0
2
  1. 2 1 2 1 0
  2. 2 1 2 -1 0
  1. 1 4 -1 0
  2. 2 2
3
  1. 2 -1000 1000 1000 0
  2. 2 1000 1000 -1000 0
  1. -1000000 2000 2000000 1000 -1000000 0
  2. 0 0
4
  1. 0
  2. 1 999 1000
  1. 0 0
  2. 999 1000
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. typedef struct Term{
  8. int coe;//系数
  9. int exp;//指数
  10. }Term;
  11.  
  12. bool compare(Term a,Term b)
  13. {
  14. return a.exp>b.exp;
  15. }
  16.  
  17. /*
  18. Term Mul(Term a,Term b)
  19. {
  20. a.coe = a.coe*b.coe;
  21. a.exp = a.exp+b.exp;
  22. return a;
  23. }
  24. */
  25.  
  26. /*
  27. Term Add(Term a,Term b)
  28. {
  29. a.coe +=b.coe;
  30. return a;
  31. }*/
  32. void print(Term a)
  33. {
  34. cout<<a.coe<<" "<<a.exp<<" ";
  35. }
  36. int main()
  37. {
  38.  
  39. vector<Term> vec1;
  40. vector<Term> vec2;
  41. vector<Term> vec;
  42. vector<Term>::iterator it1,it2;
  43.  
  44. int N1,N2;
  45. int coe,exp;
  46. bool flag = false;
  47. Term t;
  48. cin>>N1;
  49. while(N1--)
  50. {
  51. cin>>coe>>exp;
  52. t.coe = coe;
  53. t.exp = exp;
  54. vec1.push_back(t);
  55. }
  56. //for_each(vec1.begin(),vec1.end(),print);
  57. //system("pause");
  58.  
  59. cin>>N2;
  60. while(N2--)
  61. {
  62. cin>>coe>>exp;
  63. t.coe = coe;
  64. t.exp = exp;
  65. vec2.push_back(t);
  66. }
  67.  
  68. //for_each(vec2.begin(),vec2.end(),print);
  69. //system("pause");
  70.  
  71. for (it1=vec1.begin();it1!=vec1.end();it1++)
  72. for (it2=vec2.begin();it2!=vec2.end();it2++)
  73. {
  74. t.coe = it1->coe * it2->coe;
  75. t.exp = it1->exp + it2->exp;
  76. if (t.coe!=0)
  77. vec.push_back(t);
  78.  
  79. }
  80.  
  81. sort(vec.begin(),vec.end(),compare);
  82.  
  83. for (it1 = vec.begin();it1!=vec.end();it1=it2)
  84. {
  85. for (it2 = it1+1;it2!=vec.end() &&it1->exp==it2->exp;it2++)
  86. it1->coe += it2->coe;
  87. if (it1->coe!=0)
  88. {
  89. if (flag)
  90. cout<<" ";
  91. else
  92. flag = true;
  93. cout<<it1->coe<<" "<<it1->exp;
  94. }
  95. }
  96. if (vec1.size()==0)
  97. {
  98. cout<<"0 0";
  99. }
  100. cout<<endl;
  101. flag = false;
  102.  
  103. for (it1=vec1.begin(),it2=vec2.begin();it1!=vec1.end()&&it2!=vec2.end();)
  104. {
  105. if (it1->exp >it2->exp)
  106. {
  107. if (flag)
  108. cout<<" ";
  109. else
  110. flag = true;
  111. cout<<it1->coe<<" "<<it1->exp;
  112. it1++;
  113. }
  114. else if (it1->exp < it2->exp)
  115. {
  116. if (flag)
  117. cout<<" ";
  118. else
  119. flag = true;
  120. cout<<it2->coe<<" "<<it2->exp;
  121. it2++;
  122. }
  123. else
  124. {
  125.  
  126. if ((it1->coe+it2->coe))
  127. {
  128. if (flag)
  129. cout<<" ";
  130. else
  131. flag = true;
  132. cout<<it1->coe+it2->coe<<" "<<it1->exp;
  133. }
  134.  
  135. it1++;
  136. it2++;
  137. }
  138. }
  139.  
  140. if (it1==vec1.end())
  141. {
  142. while(it2!=vec2.end())
  143. {
  144. if (flag)
  145. cout<<" ";
  146. else
  147. flag = true;
  148. cout<<it2->coe<<" "<<it2->exp;
  149. it2++;
  150. }
  151. }
  152.  
  153. if (it2==vec2.end())
  154. {
  155. while(it1!=vec1.end())
  156. {
  157. if (flag)
  158. cout<<" ";
  159. else
  160. flag = true;
  161. cout<<it1->coe<<" "<<it1->exp;
  162. it1++;
  163. }
  164. }
  165.  
  166. if (flag==false)
  167. cout<<"0 0";
  168. cout<<endl;
  169.  
  170. //for_each(vec.begin(),vec.end(),print);
  171.  
  172. //system("pause");
  173. return 0;
  174. }

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

浙江大学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. BZOJ 1823: [JSOI2010]满汉全席( 2-sat )

    2-sat...假如一个评委喜好的2样中..其中一样没做, 那另一样就一定要做, 这样去建图..然后跑tarjan. 时间复杂度O((n+m)*K) ------------------------- ...

  2. table中的换行问题

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. [Python]小笔记-queue

    queue的作用: 队列最大的作用就是先进先出(First in First Out).队列对于解决最短路的时候特别好用. python 2.7: 要使用队列,那么要加载头文件Queue,也就是imp ...

  4. 转 fiddler教程

    Fiddler 教程 Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发 ...

  5. 修改MojoWeixin 只保留用户name 取消群昵称

    <pre name="code" class="python"> if($msg->type eq "friend_message& ...

  6. Java 如何判断一个字符是否是数字或字母

    在C++中, 可以用isdigit()判断一个字符是否是数字,可以用isalpha()判断一个字符是否是字母,还有很多,都在<cctype>头文件中 而类似的方法在JAVA中,则主要是Ch ...

  7. BZOJ 1665: [Usaco2006 Open]The Climbing Wall 攀岩

    题目 1665: [Usaco2006 Open]The Climbing Wall 攀岩 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 197  Sol ...

  8. 动态弹球的实现 加入了多线程技术--javaSE游戏准备工作

    任务描述:实现了动态弹球的功能,对于有弹球功能的SE游戏奠定了基础. package 运用线程技术的小球; import java.awt.*; import java.awt.event.*; im ...

  9. cocos2d-x3.6 连连看连通画线

    我的博客:http://blog.csdn.net/dawn_moon 网上看到非常多人写的连连看,都没有画连线的实现.事实上要话连线挺简单的.cocos2d-x 提供了一个非常方便的绘图形的类.Dr ...

  10. POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9658   Accepted: ...