• 一元多项式的乘法与加法运算


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

    输入格式:

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

    输出格式:

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

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. class MyCompare
    7. {
    8. public:
    9. bool operator()(pair<int, int> p1, pair<int, int> p2)
    10. {
    11. if (p1.first > p2.first)
    12. {
    13. return true;
    14. }
    15. else
    16. {
    17. return false;
    18. }
    19. }
    20. };
    21. int main()
    22. {
    23. vectorint, int>> v1;
    24. vectorint, int>> v2;
    25. vectorint, int>> v3;// 和
    26. vectorint, int>> v4;// 积
    27. int number_of_terms = 0;
    28. scanf("%d", &number_of_terms);
    29. while (number_of_terms != 0)
    30. {
    31. int coefficient = 0;
    32. int index = 0;
    33. scanf("%d", &coefficient);
    34. scanf("%d", &index);
    35. number_of_terms--;
    36. v1.push_back(pair<int, int>(index, coefficient));
    37. }
    38. scanf("%d", &number_of_terms);
    39. while (number_of_terms != 0)
    40. {
    41. int coefficient = 0;
    42. int index = 0;
    43. scanf("%d", &coefficient);
    44. scanf("%d", &index);
    45. number_of_terms--;
    46. v2.push_back(pair<int, int>(index, coefficient));
    47. }
    48. // 求积
    49. for (int i = 0; i < v1.size(); i++)
    50. {
    51. for (int j = 0; j < v2.size(); j++)
    52. {
    53. v4.push_back(pair<int, int>(v1[i].first+v2[j].first, v1[i].second*v2[j].second));
    54. }
    55. }
    56. sort(v4.begin(), v4.end(), MyCompare());
    57. listint, int>> tmp(v4.begin(), v4.end());
    58. auto cur = tmp.begin();
    59. cur++;
    60. auto prev = tmp.begin();
    61. while (cur != tmp.end())
    62. {
    63. if (cur->first == prev->first)
    64. {
    65. prev->second = prev->second + cur->second;
    66. cur = tmp.erase(cur);
    67. }
    68. else
    69. {
    70. prev++;
    71. cur++;
    72. }
    73. }
    74. cur = tmp.begin();
    75. while(cur != tmp.end())
    76. {
    77. if (cur->second == 0)
    78. {
    79. cur = tmp.erase(cur);
    80. }
    81. else{
    82. cur++;
    83. }
    84. }
    85. if (tmp.empty())
    86. {
    87. tmp.push_back(pair<int,int>(0,0));
    88. }
    89. cur = tmp.begin();
    90. int y = 0;
    91. int size = tmp.size();
    92. while (cur != tmp.end())
    93. {
    94. if (y != size - 1)
    95. {
    96. cout << cur->second << ' ' << cur->first << ' ';
    97. cur++;
    98. y++;
    99. }
    100. else
    101. {
    102. cout << cur->second << ' ' << cur->first;
    103. cout << endl;
    104. cur++;
    105. y++;
    106. }
    107. }
    108. // 求和
    109. int i = 0;
    110. int j = 0;
    111. while (i < v1.size() && j < v2.size())
    112. {
    113. if (v1[i].first > v2[j].first)
    114. {
    115. v3.push_back(v1[i]);
    116. i++;
    117. }
    118. else if (v1[i].first < v2[j].first)
    119. {
    120. v3.push_back(v2[j]);
    121. j++;
    122. }
    123. else
    124. {
    125. v3.push_back(pair<int, int>(v1[i].first, v1[i].second + v2[j].second));
    126. i++;
    127. j++;
    128. }
    129. }
    130. if (i == v1.size())
    131. {
    132. while (j < v2.size())
    133. {
    134. v3.push_back(v2[j]);
    135. j++;
    136. }
    137. }
    138. if (j == v2.size())
    139. {
    140. while (i < v1.size())
    141. {
    142. v3.push_back(v1[i]);
    143. i++;
    144. }
    145. }
    146. listint, int>> tmp2(v3.begin(), v3.end());
    147. auto cur2 = tmp2.begin();
    148. while(cur2 != tmp2.end())
    149. {
    150. if (cur2->second == 0)
    151. {
    152. cur2 = tmp2.erase(cur2);
    153. }
    154. else{
    155. cur2++;
    156. }
    157. }
    158. if (tmp2.empty())
    159. {
    160. tmp2.push_back(pair<int,int>(0,0));
    161. }
    162. cur2 = tmp2.begin();
    163. y = 0;
    164. size = tmp2.size();
    165. while (cur2 != tmp2.end())
    166. {
    167. if (y != size - 1)
    168. {
    169. cout << cur2->second << ' ' << cur2->first << ' ';
    170. cur2++;
    171. y++;
    172. }
    173. else
    174. {
    175. cout << cur2->second << ' ' << cur2->first;
    176. cur2++;
    177. y++;
    178. }
    179. }
    180. return 0;
    181. }

  • 相关阅读:
    OBIA:900+ 患者、193w+ 影像,中科院基因组所发布我国首个生物影像共享数据库
    最新Next14 路由处理器 Route Handlers
    软件测试之功能测试详解
    宏集新闻 | 虹科传感器事业部正式更名为宏集科技
    区块链概念集合
    基于一个多分类问题比较bert单任务训练和多任务训练
    【Python 实战】---- 使用 RemoveBg 实现一键批量抠图
    【FastChat】用于训练、服务和评估大型语言模型的开放平台
    mysql事务详解
    CG Magic分享同一场景里下,VR渲染器和CR渲染器哪个好?
  • 原文地址:https://blog.csdn.net/m0_73497041/article/details/132763927