7-2 一元多项式的乘法与加法运算

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

输入格式:

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

输出格式:

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

 

输入样例:

1
2
4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

 

输出样例:

1
2
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

 

代码:

复制代码
#include <stdio.h>
#include <stdlib.h>

#define SIZE 2005
//struct Item {
//    int Coefficient;
//    int Exponent;
//};
using namespace std;
int main()
{
    int n,m;
    bool flag=false;
    int coefficient,exponent;
    int P1[SIZE]={0},P2[SIZE]={0},S[SIZE]={0},M[SIZE*2]={0};
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&coefficient);
        scanf("%d",&exponent);
        P1[exponent+1000]=coefficient;
    }
    scanf("%d",&m);
    for(int i=0;i<m;i++){
        scanf("%d",&coefficient);
        scanf("%d",&exponent);
        P2[exponent+1000]=coefficient;
    }

    for(int i=0;i<=2000;i++){
        if(P1[i]!=0){
            S[i]+=P1[i];
        }
        if(P2[i]!=0){
            S[i]+=P2[i];
        }
    }

    for(int i=0;i<=2000;i++){
        if(P1[i]!=0){
            for(int j=0;j<=2000;j++){
                if(P2[j]!=0){
                    M[(i-1000)+(j-1000)+2000]+=P1[i]*P2[j];
                }
            }
        }
    }

    for(int i=4000;i>=0;i--){
       
        if(M[i]!=0){
            if(flag==true){
                printf(" ");
            }
            flag=true;
            printf("%d %d",M[i],i-2000);
        }

    }
    if(flag==false){
        printf("0 0");
    }
    printf("\n");
    flag=false;
    for(int i=2000;i>=0;i--){
        if(S[i]!=0){
            if(flag==true){
                printf(" ");
            }
            flag=true;
            printf("%d %d",S[i],i-1000);
        }

    }
    if(flag==false){
        printf("0 0");
    }
    
    
    return 0;
}
复制代码

困难点:

1、如何表示多项式:使用数组表示(P[Exponent]=Coefficient);

2、数组的下标不能小于0,因此当指数(Exponent)小于0时,会出现错误;

3、相乘时指数是相加的,而不是相乘,系数是相乘的;

4、输出时注意最后一个数字后面不能有空格;

5、考虑当多项式等于0的情况。

 

posted @   Yohoc  阅读(191)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示