1009 Product of Polynomials (25分) C++
发布日期:2021-05-08 02:32:51 浏览次数:34 分类:精选文章

本文共 1422 字,大约阅读时间需要 4 分钟。

多项式乘法的实现

多项式乘法涉及两个多项式A和B的相乘,要求输出乘积的非零项。以下是实现步骤:

  • 读取输入:每个测试用例包含两行,分别表示多项式A和B。每行格式为K a1 a2 ... aK,其中K为非零项数,ai为指数,ai的系数依次排列。

  • 存储多项式项:使用两个数组分别存储多项式A和B的项,按指数降序排列。数组索引表示指数,值表示系数。

  • 初始化结果数组:创建一个足够大的数组来存储乘积结果,同样按指数降序排列。

  • 多项式乘法:使用双重循环遍历A和B的每一项,计算乘积并累加到结果数组中。

  • 合并同类项:从最高指数开始遍历结果数组,记录非零项。

  • 输出结果:输出非零项的数量和每个项的指数及其系数,保留一位小数,确保格式正确。

  • 以下是实现代码:

    #include 
    using namespace std;int main() { int k1, mp1, mp2; double po1[2500], po2[2500], po3[2500]; cin >> k1; for (int i = 0; i < k1; ++i) { int n; double p; scanf("%d", &n); scanf("%lf", &p); if (n > mp1) mp1 = n; po1[n] = p; } cin >> k1; for (int i = 0; i < k1; ++i) { int n; double p; scanf("%d", &n); scanf("%lf", &p); if (n > mp2) mp2 = n; po2[n] = p; } int k3 = 0; for (int i = mp1; i >=0; --i) { for (int j = mp2; j >=0; --j) { int total = i + j; if (total > 2500) continue; po3[total] += po1[i] * po2[j]; } } int count = 0; for (int i = 2500; i >=0; --i) { if (po3[i] != 0) { count++; if (count <= 2500) { printf("%d %.1lf", i, po3[i]); } } }}

    代码解释:

  • 读取输入:首先读取多项式A和B的非零项数K,然后读取每个项的指数和系数。

  • 存储多项式项:将多项式项按指数存入数组,数组索引即为指数,值为系数。

  • 初始化结果数组:po3数组用于存储乘积结果,同样按指数排列。

  • 多项式乘法:双重循环遍历A和B的每一项,计算乘积并累加到结果数组中。

  • 合并同类项:从最高指数开始遍历结果数组,记录非零项。

  • 输出结果:输出非零项的数量和每个项的指数及其系数,确保格式正确。

  • 上一篇:unity2d实现车随轮子转动而移动(Wheel Joint 2D组件理解)
    下一篇:unity2d实现碰撞后物体随力转动(Hinge Joint 2D理解)

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年05月01日 02时20分26秒