C++多项式的乘法

   日期:2020-10-15     浏览:158    评论:0    
核心提示:写代码半小时,找bug两小时一个有bug的代码,错误估计出在addpnode函数上面了#include<iostream>using namespace std;typedef struct pnode { int coef; int exp; pnode* next;}pnode;class poly {private: pnode* head;public: poly() { h

写代码半小时,找bug两小时
这波终于没bug啦!
耶耶耶




#include<iostream>
using namespace std;
typedef struct pnode { 
    int coef;
    int exp;
    pnode* next;
}pnode;
class poly { 
private:
    pnode* head;
public:
    poly() {  head = new pnode; head->next = NULL; }
    void create(int n);
    void print();
    int comp(int a, int b);
    void addpoly(poly& ha, poly hb);
    //在ha中加项x,
    void addpnode(poly& ha, pnode* x);
    void timespoly(poly& hc, poly ha, poly hb);



};
void poly::create(int n) { 
    pnode* rear = head, * s;
    for (int i = 0; i < n; i++) { 
        s = new pnode;
        cin >> s->coef >> s->exp;
        rear->next = s;
        rear = s;
    }
    rear->next = NULL;
}
void poly::print() { 
    pnode* p = head->next;
    while (p) { 
        cout << p->coef << ' ' << p->exp << ',';
        p = p->next;
    }
    cout << endl;
}
int poly::comp(int a, int b) { 
    if (a > b)return -1;
    else if (a == b)return 0;
    else return 1;
}

//把hb多项式加到ha多项式上去
void poly::addpoly(poly& ha, poly hb) { 
    pnode* pa = ha.head->next, * q = ha.head, * pb = hb.head->next, * r;
    while (pa && pb)
        switch (comp(pa->exp, pb->exp)) { 
        case -1:q = pa; pa = pa->next; break;
        case 1:r = new pnode;
            r->coef = pb->coef;
            r->exp = pb->exp;
            r->next = pa;
            q->next = r;
            q = r;
            pb = pb->next;
            break;
        case 0:pa->coef += pb->coef;
            if (pa->coef == 0) { 
                q->next = pa->next;
                delete pa;
                pa = q;
            }
            else q = pa;
            pa = pa->next;
            pb = pb->next;
            break;
        }
    while (pb) { 
        r = new pnode;
        r->coef = pb->coef;
        r->exp = pb->exp;
        r->next = NULL;
        q->next = r;
        q - r;
        pb = pb->next;
    }
}

void poly::addpnode(poly& ha, pnode* x)
{ 
    pnode* pa = ha.head->next, * q = ha.head ,*r;
    if (pa == NULL)
    { 
        r = new pnode;
        r->coef = x->coef;
        r->exp = x->exp;
        r->next = pa;
        q->next = r;
        q = r;
        return;
    }
    while (pa)
        switch (comp(pa->exp, x->exp)) { 
        case -1: q = pa; pa = pa->next;
            if (pa == NULL)
            { 
                r = new pnode;
                r->coef = x->coef;
                r->exp = x->exp;
                r->next = pa;
                q->next = r;
                q = r;
                return;
            }break;
        case 1:r = new pnode;
            r->coef = x->coef;
            r->exp = x->exp;
            r->next = pa;
            q->next = r;
            q = r;
            break;
        case 0:pa->coef += x->coef;
            if (pa->coef == 0) { 
                q->next = pa->next;
                delete pa;
                pa = q;
            }//系数为0的话就删除该节点
            else q = pa;
            pa = pa->next;
            break;
            
        }
    
}


//把ha,hb相乘得到hc
void poly::timespoly(poly& hc, poly ha, poly hb)
{ 
    pnode* pa = ha.head->next, * pb = hb.head->next;
    pnode* r;
    while (pa) { 
        while (pb)
        { 
            r = new pnode;
            r->coef = pa->coef * pb->coef;//系数相乘
            r->exp = pa->exp + pb->exp;//指数相加
            addpnode(hc, r);
            pb = pb->next;
        }
        pb = hb.head->next;
        pa = pa->next;


   }
}



int main() { 
    poly ha, hb,hc;
    ha.create(2);
    hb.create(3);
    ha.print();
    hb.print();
    ha.timespoly(hc,ha,hb);
    hc.print();

    return 0;
}






 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服