线性结构2 一元多项式的乘法与加法运算

本文介绍了一种使用C++实现的一元多项式加法与乘法的方法。通过定义多项式节点结构体和多项式类,实现了多项式的输入、运算及输出功能。该程序能够处理用户输入的两个一元多项式,并输出它们的乘积和和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

输入格式:

输入分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 <list>
#include <iterator>

using namespace std;

typedef struct PolyNode{
    int m_iCoef;
    int m_iExpon;
}PolyNode;


class Polynomial
{
public:
    Polynomial(){
        
    };
    Polynomial(const Polynomial &data){
        copy(data.PolyList.begin(), data.PolyList.end(),back_inserter(PolyList));
        
    }
    ~Polynomial(){
        PolyList.clear();
    }
    
    void insertTerm(const PolyNode &data){
        PolyList.push_back(data);
    };
    void pinrt(){
        if (PolyList.empty()) {
            cout << 0 << " " << 0 << endl;
            return;
        }
        list<PolyNode>::iterator it = PolyList.begin();
        cout << it->m_iCoef << " " << it->m_iExpon;
        it++;
        for( ;it != PolyList.end();it++)
        {
            cout << " " << it->m_iCoef << " " << it->m_iExpon;
        }
        cout << endl;
    };
    
    Polynomial& operator=(const Polynomial & poly){
        PolyList.clear();
        copy(poly.PolyList.begin(), poly.PolyList.end(), back_inserter(PolyList));
        return *this;
    };
    
    Polynomial operator+(const Polynomial & poly){
        Polynomial results;
        list<PolyNode>::iterator itA = PolyList.begin();
        list<PolyNode>::const_iterator itB = poly.PolyList.begin();
        while (1) {
            if(itA == PolyList.end() && itB ==poly.PolyList.end())
                break;
            
            if (itA != PolyList.end() && itB != poly.PolyList.end()) {
                if (itA->m_iExpon > itB->m_iExpon) {
                    results.insertTerm(*itA);
                    itA++;
                }else if (itA->m_iExpon == itB->m_iExpon){
                    PolyNode temp;
                    temp.m_iCoef = itA->m_iCoef + itB->m_iCoef;
                    temp.m_iExpon = itA->m_iExpon;
                    if(temp.m_iCoef)
                        results.insertTerm(temp);
                    itA++;
                    itB++;
                }else{
                    results.insertTerm(*itB);
                    itB++;
                }
            }else if (itA == PolyList.end()){
                results.insertTerm(*itB);
                itB++;
            }else if (itB == poly.PolyList.end()){
                results.insertTerm(*itA);
                itA++;
            }
        }
        return results;
    };//多项式加法
    
    //多项式乘法
    Polynomial operator*(const Polynomial & poly){
        Polynomial results;
        list<PolyNode>::iterator itA;
        list<PolyNode>::const_iterator itB;
        for (itA=PolyList.begin(); itA!=PolyList.end(); itA++) {
            Polynomial PolyTemp;
            for (itB=poly.PolyList.begin(); itB!=poly.PolyList.end(); itB++) {
                PolyNode data;
                data.m_iCoef = itA->m_iCoef * itB->m_iCoef;
                data.m_iExpon = itA->m_iExpon + itB->m_iExpon;
                PolyTemp.insertTerm(data);
            }
            results = results + PolyTemp;
        }
        return results;
    }
    
    
private:
    list<PolyNode> PolyList;
};


int main()
{
    Polynomial Data1, Data2,Data3,Data4;
    int num;
    cin >> num;
    for(int i=0;i<num; i++)
    {
        PolyNode node;
        cin >> node.m_iCoef >> node.m_iExpon;
        Data1.insertTerm(node);
    }
    cin >> num;
    for(int i=0;i<num; i++){
        PolyNode node;
        cin >> node.m_iCoef >> node.m_iExpon;
        Data2.insertTerm(node);
    }
    
    
    Data4 = Data1 * Data2;
    Data4.pinrt();
    
    Data3 = Data1 + Data2;
    Data3.pinrt();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值