爆刷PAT(甲级)——之【1009】 Product of Polynomials (25)——多项式乘积,C++

版权声明:本文为博主原创文章,未经博主允许不得转载。(但可以打钱或卖萌.jpg) https://blog.csdn.net/Hide_in_Code/article/details/81561378

艰难的英语单词:

  polynomial    英 [ˌpɒlɪ'nəʊmɪəl]     多项式 n.

  exponents     英 [ɪks'pəʊnənts]     指数 n.

  coefficients      英 [kəʊɪ'fɪʃənts]     系数 n.          (呵呵,再次遇见还是不认识)

题意:给两个多项式,输出乘积

难点:和前面的1002的多项式和差不多,稍微改一下就行。。。但是要注意的是,题目说的指数幂次小于等于1000,也就是最大2000,不是输入的位数

Code:

主要的办法还是用“桶”,清晰快捷。输入输出都用桶。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define inf 1009
#define INF 0x3f3f3f3f
#define loop(x,y,z) for(x=y;x<z;x++)

double num1[inf];
double num2[inf];
double ans[2*inf];
int n1,n2;

void Input()
{
    int i;
    scanf("%d",&n1);
    loop(i,0,n1)
    {
        int v;
        double u;
        scanf("%d %lf",&v,&u);
        num1[v]+=u;
    }
    scanf("%d",&n2);
    loop(i,0,n2)
    {
        int v;
        double u;
        scanf("%d %lf",&v,&u);
        num2[v]+=u;
    }
}

void Solve()//多项式乘法
{
    int i,j;
    loop(i,0,inf)
        loop(j,0,inf)
        ans[i+j]+=num1[i]*num2[j];
}

void Output()
{
    int i;
    int sum=0;
    loop(i,0,2*inf)//注意这里是2*1000
        if(ans[i])sum++;
    printf("%d",sum);

    for(i=2*inf;i>=0;i--)//输出的结果也要是2*1000
    if(ans[i])
        printf(" %d %.1f",i,ans[i]);
    printf("\n");
}

int main()
{
    Input();
    Solve();
    Output();
    return 0;
}

没有更多推荐了,返回首页