1. 程式人生 > >中國大學慕課-資料結構(浙江大學)課後練習-02-線性結構2 一元多項式的乘法與加法運算

中國大學慕課-資料結構(浙江大學)課後練習-02-線性結構2 一元多項式的乘法與加法運算

02-線性結構2 一元多項式的乘法與加法運算(20 分)

設計函式分別求兩個一元多項式的乘積與和。

輸入格式:

輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。

輸出格式:

輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。零多項式應輸出0 0

輸入樣例:

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

輸出樣例:

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 <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> D(2009,0),C(2009,0);
struct Poly
{
    int zhishu;
    int xishu;
};
int main()
{
    //freopen("out.txt","r",stdin);
    Poly T1[1000],T2[1000];
    int K1,K2;
    int tag1=0,tag2=0;
    cin>>K1;
    for(int i=0; i<K1; i++)    cin>>T1[i].xishu>>T1[i].zhishu;
    cin>>K2;
    for(int i=0; i<K2; i++)    cin>>T2[i].xishu>>T2[i].zhishu;
    C.resize(T1[0].zhishu+T2[0].zhishu);
    D.resize(T1[0].zhishu>T2[0].zhishu?T1[0].zhishu:T2[0].zhishu);
    for(int i=0; i<K1; i++)
    {
        for(int j=0; j<K2; j++)
        {
            C[T1[i].zhishu+T2[j].zhishu]+=T1[i].xishu*T2[j].xishu;
        }
    }
    for(int i=0; i<K1; i++)    D[T1[i].zhishu]+=T1[i].xishu;
    for(int j=0; j<K2; j++)    D[T2[j].zhishu]+=T2[j].xishu;
    for(int i=T1[0].zhishu+T2[0].zhishu; i>=0; i--)
    {
        if(C[i]!=0)
        {
            tag1=1;
            if(i!=T1[0].zhishu+T2[0].zhishu)   cout<<" ";
            cout<<C[i]<<" "<<i;
        }
    }
    if(!tag1)   cout<<"0 0";
    cout<<endl;
    int m=T1[0].zhishu>T2[0].zhishu?T1[0].zhishu:T2[0].zhishu;
    for(int i=m; i>=0; i--)
    {
        if(D[i]!=0)
        {
            tag2=1;
            if(i!=m)   cout<<" ";
            cout<<D[i]<<" "<<i;
        }

    }
    if(!tag2)    cout<<"0 0";
}