一元多项式的相加部分

不出结果
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/286252772096179.png "#left

#include<bits/stdc++.h>
#define OK 1
#define ERROR 0;
using namespace std;
typedef int Status;
//链式多项式的创建 
typedef struct PNode
{
    float coef ;
    int   expn ;
    struct PNode *next ;
}PNode,*Polynomial ; 
//创建多项式 
void CreatePolyn(Polynomial &P,int n)
{
    int i ;
    P=new PNode ;
    P->next = NULL ;
    for(i=1 ; i<=n ; ++i)
    {
        Polynomial s = new PNode ;
        cout<<"请分别输入多项式的系数和指数!\n"<<endl;
        cin>>s->coef>>s->expn ;
        Polynomial pre = P ;
        Polynomial q = P->next ;
        while(q&&q->expn<s->expn )
        {
            pre = q ;
            q = q->next ;
        }
        s->next = q ;
        pre->next = s ;
    }
}
//多项式的相加
void AddPolyn(Polynomial &Pa,Polynomial &Pb)
{  
    Pa = new PNode ;
    Pb = new PNode ;
    Polynomial p1 = Pa->next  ; Polynomial  p2 = Pb->next ;
    Polynomial p3 = Pa ;
    
    while(p1&&p2)
    {   int sum = 0 ;
        if(p1->expn == p2->expn )
        {
            sum = p1->coef + p2->coef ;
            if(sum!=0)
            {
                p1->coef = sum;
                p3->next = p1 ; p3 = p1 ;
                p1 = p1->next ;
                Polynomial r = p2 ; p2 = p2->next ; delete r ;
             }
                else
                {  
                  Polynomial r ;
                  r = p1 ; p1 = p1->next ; delete r ;
                  r = p2 ; p2 = p2->next ; delete r ; 
                }
            }
            else if(p1->next < p2->next)
            {
                p3->next = p1 ;
                p3 = p1 ;
                p1 = p1->next ;
            }
            else
            {
                p3->next = p2 ;
                p3 = p2 ;
                p2 = p2->next ;
                
            }
        }
        p3->next = p1?p1:p2;
        delete Pb;
        Polynomial p4 = p1->next;
        while (p4&&p4->next)
        {
          cout << p4->coef  << "x^" << p4->expn <<"+";
          p4 = p4->next;
        }
        if (p4->expn  == 1)
          cout << p4->coef <<"x";
        else
          cout<< p4->coef  << "x^" << p4->expn ;
    }

int main()
{
    int a,b=1;
    Polynomial(P)  ;
    Polynomial Pa  ;
    Polynomial Pb  ;
    cout<<"请选择你要进行的操作!\n"<<endl;
    while(b)
    {
        cout<<"--------------------------------------------------------------------------\n"<<endl;
        cout<<"1.创建多项式     2.多项式相加     3.多项式相减    4.退出操作\n"<<endl;
        cin>>a;    
        switch(a)
        {   int n,m;
            case(1): cout<<"请输入Pa的项数!\n"<<endl ; cin>>n ;
                     CreatePolyn(Pa,n) ;
                     cout<<"请输入Pb的项数!\n"<<endl ; cin>>m ;
                     CreatePolyn(Pb,m) ; break ;
            case(2): AddPolyn(Pa,Pb) ; break ;
            case(3):
            case(4):
            default: printf("输入有误!请重新输入!") ; 
        }     
    }
}

题主代码修改如下,改动处见注释处,供参考。另这种的写法,当做了加法,对链表Pa Pb 均做了改变,再想做减法前,还必须重新输入两个链表后即重新运行步骤 1.创建多项式 后才可进行。

#include <iostream>
//#include<bits/stdc++.h>
#define OK 1
#define ERROR 0;
using namespace std;
typedef int Status;
//链式多项式的创建
typedef struct PNode
{
    float coef ;
    int   expn ;
    struct PNode *next ;
}PNode,*Polynomial;
//创建多项式
void CreatePolyn(Polynomial &P,int n)
{
    int i ;
    P=new PNode ;
    P->next = NULL ;
    for(i=1 ; i<=n ; ++i)
    {
        Polynomial s = new PNode ;
        cout<<"请分别输入多项式的系数和指数!\n"<<endl;
        cin>>s->coef>>s->expn ;
        Polynomial pre = P ;
        Polynomial q = P->next ;
        while(q && q->expn < s->expn )
        {
            pre = q ;
            q = q->next ;
        }
        s->next = q ;
        pre->next = s ;
    }
}
//多项式的相加
void AddPolyn(Polynomial &Pa,Polynomial &Pb)
{
    //Pa = new PNode ;   修改
    //Pb = new PNode ;   修改
    Polynomial p1 = Pa->next  ; Polynomial  p2 = Pb->next ;
    Polynomial p3 = Pa ;

    while(p1 && p2)
    {
        float sum = 0 ; //int sum = 0 ;  修改
        if(p1->expn == p2->expn )
        {
            sum = p1->coef + p2->coef ;
            if(sum!=0)
            {
                p1->coef = sum;
                p3->next = p1 ; p3 = p1 ;
                p1 = p1->next ;
                Polynomial r = p2 ; p2 = p2->next ; delete r ;
             }
             else
             {
                 Polynomial r ;
                 r = p1 ; p1 = p1->next ; delete r ;
                 r = p2 ; p2 = p2->next ; delete r ;
             }
        }
        else if(p1->expn < p2->expn)// if(p1->next < p2->next) 修改
        {
            p3->next = p1 ;
            p3 = p1 ;
            p1 = p1->next ;
        }
        else
        {
            p3->next = p2 ;
            p3 = p2 ;
            p2 = p2->next ;
        }
    }
    p3->next = p1 ? p1 : p2;
    delete Pb;
    Polynomial p4 = Pa->next; //p1->next; 修改
    while (p4)   //&& p4->next)           修改
    {
        cout << p4->coef  << "x^" << p4->expn;// 修改
        if (p4->next) cout<<"+";              // 修改
        p4 = p4->next;
    }
    cout << endl;  //      修改
    //if (p4->expn  == 1)   修改
    //    cout << p4->coef <<"x";修改
    //else                        修改
    //    cout<< p4->coef  << "x^" << p4->expn ;修改
}

int main()
{
    int a,b=1;
    Polynomial(P)  ;
    Polynomial Pa  ;
    Polynomial Pb  ;
    cout<<"请选择你要进行的操作!\n"<<endl;
    while(b)
    {
        cout<<"--------------------------------------------------------------------------\n"<<endl;
        cout<<"1.创建多项式     2.多项式相加     3.多项式相减    4.退出操作\n"<<endl;
        cin>>a;
        switch(a)
        {   int n,m;
            case(1): cout<<"请输入Pa的项数!\n"<<endl ; cin>>n ;
                     CreatePolyn(Pa,n) ;
                     cout<<"请输入Pb的项数!\n"<<endl ; cin>>m ;
                     CreatePolyn(Pb,m) ; break ;
            case(2): AddPolyn(Pa,Pb) ; break ;
            case(3):
            case(4):
            default: printf("输入有误!请重新输入!") ;
        }     
    }
}

AddPolyn 存在死循环

case后面是不用加括号的

判断错误了

else if (p1->next < p2->next)
改成
else if (p1->expn < p2->expn)

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^