首页 > 代码库 > PAT甲题题解-1009. Product of Polynomials (25)-多项式相乘

PAT甲题题解-1009. Product of Polynomials (25)-多项式相乘

多项式相乘

注意相乘结果的多项式要开两倍的大小!!!

技术分享
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string.h>
using namespace std;
//两个多项式相乘
const int maxn=1000+5;
int k;
//原本定义个exp导致编译错误,没想到定义成exp1、exp2也会编译错误,估计引起函数名冲突了
double exps1[maxn];
double exps2[maxn];
int main()
{
    memset(exps1,0,sizeof(exps1));
    memset(exps2,0,sizeof(exps2));
    int ee;
    double val;
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d %lf",&ee,&val);
        exps1[ee]=val;
    }
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d %lf",&ee,&val);
        exps2[ee]=val;
    }
    double ans[maxn*2]; //注意这里要开2倍的大小
    memset(ans,0,sizeof(ans));
    for(int i=0;i<maxn;i++){
        for(int j=0;j<maxn;j++){
            ans[i+j]+=exps1[i]*exps2[j];
        }
    }
    int cnt=0;
    for(int i=0;i<maxn*2;i++){
        if(ans[i]!=0)
            cnt++;
    }
    printf("%d",cnt);
    for(int i=maxn*2-1;i>=0;i--){
        if(ans[i]!=0){
            printf(" %d %.1lf",i,ans[i]);
        }
    }
    return 0;
}
View Code

 

PAT甲题题解-1009. Product of Polynomials (25)-多项式相乘