c++编程 多项式的乘法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++编程 多项式的乘法相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<cmath>
using namespace std;
formula *head,*rear,*p;
formula *set();//设置多项式的函数
formula *deal(formula *m);//将多项式合并同类项并按照指数从小到大排列
void num(formula *m);//计算多项式的数值
void show(formula *m);//显示多项式

formula *mul(formula *m,formula *n);//多项式的乘法
struct formula

double a;
int i;
formula *next;
;//链表,用于形成多项式
void main()

system("color 3e");
formula *s1,*s2,*snum;

cout<<"程序开始了"<<endl;
s1=set();
cout<<"f(x)=";
show(s1);

cout<<"***************"<<endl;
s2=set();
cout<<"g(x)=";
show(s2);

system("cls");
cout<<"^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"下面开始运算"<<endl;
cout<<endl;

cout<<"f(x)=";
show(s1);
cout<<endl;
cout<<"g(x)=";
show(s2);
cout<<endl;
snum=mul(s1,s2);cout<<"f(x)*g(x)=";

show(snum);

cout<<"此次运算结束"<<endl;


void show(formula *m)

formula *rem;
rem=m;
while(m->next!=NULL)

switch(m->i)
case 0:cout<<m->a<<"+";break;
case 1:cout<<m->a<<"x"<<m->i<<"+";break;
default:cout<<m->a<<"x^"<<m->i<<"+";break;

m=m->next;


switch(m->i)

case 0:cout<<m->a;break;
case 1:cout<<m->a<<"x"<<m->i;break;
default:cout<<m->a<<"x^"<<m->i;break;


m=rem;
cout<<endl;


formula *mul(formula *m,formula *n)

int k=0;
formula *str[100],*r,*t,*sum,*x,*y;
x=m->next;
y=n->next;
for(x;x!=NULL;x=x->next,k++)

str[k]=new formula;
r=str[k];
y=n->next;
for(y;y!=NULL;y=y->next)

t=new formula;
t->next=NULL;
t->a=x->a*y->a;
t->i=x->i+y->i;
r->next=t;
r=t;



r->next=NULL;
sum=str[0];
for(int z=1;z<k;z++)
sum=add(sum,str[k]);

return sum;


formula *set()

head=rear=new formula;

int j=1;
int y;
double x;

cout<<"输入多项式的项数"<<endl;
int n;
cin>>n;

for(j=1;j<=n;j++)

p=new formula;
cout<<"请输入第"<<j<<"项的系数和指数"<<endl;
cin>>x>>y;
p->a=x;
p->i=y;
rear->next=p;
rear=p;

rear->next=NULL;

p=head->next;

while(p!=NULL)

int t;
t=p->i;

formula *convey;
convey=p;

while(p->next!=NULL)

if (t==(p->next->i))

convey->a+=(p->next->a);

if (p->next==rear)

rear=p;
p->next=NULL;


else
formula *del;
del=p->next;
p->next=del->next;
delete del;


else
p=p->next;

p=convey;
p=p->next;

p=head->next;
while(p!=NULL)


formula *c;
c=p;
while(p->next!=NULL)


if((c->i)>(p->next->i))

int m;
m=c->i;
c->i=(p->next->i);
p->next->i=m;
double n;
n=c->a;
c->a=(p->next->a);
(p->next->a)=n;

p=p->next;

p=c;
p=p->next;


p=head->next;

return p;
delete head,rear;

formula *deal(formula *m)

formula *tem;
tem=m;
while(m!=NULL)

int t;
t=m->i;

formula *convey;
convey=m;

while(m->next!=NULL)

if (t==(m->next->i))

convey->a+=(m->next->a);

if (m->next->next==NULL)

m->next=NULL;

else
formula *del;
del=m->next;
m->next=del->next;
delete del;


else
m=m->next;

m=convey;
m=m->next;

m=tem;
while(m!=NULL)


formula *c;
c=m;
while(m->next!=NULL)


if((c->i)>(m->next->i))

int con;
con=c->i;
c->i=(m->next->i);
m->next->i=con;
double non;
non=c->a;
c->a=(m->next->a);
(m->next->a)=non;

m=m->next;

m=c;
m=m->next;


m=tem;
return m;


求乘法的实现,方法不限,可以不用我的实现方法,急求,谢谢

#include <iostream>
#include<algorithm>
using namespace std;

class Polynomial;
class Term//多项式的每一项
friend Polynomial;
public:
float coef;//系数
int exp;//指数
;

class Polynomial//多项式类
friend ostream & operator<<(ostream &o,const Polynomial & poly);
public:
Polynomial();
Polynomial(const Polynomial & poly);
~Polynomial();
Polynomial operator+(const Polynomial & poly);//多项式加法
Polynomial operator*(const Polynomial & poly);//多项式乘法
float Eval(float x);//数x代入多项式求值
void NewTerm(float coef,int exp);//添加一项,若有相同的指数项,则合并
private:
void insertTerm(const Term & term);//项的有序插入
private:
Term *termArray;//非零系数项数组
int capacity;//数组大小
int terms;//非零系数的项数
;

Polynomial::Polynomial()

this->terms=0;
this->capacity=10;
termArray=new Term[this->capacity];


Polynomial::Polynomial(const Polynomial & b)

this->terms=0;
this->capacity=b.capacity;
termArray = new Term[this->capacity];
for(int i=0;i<b.terms;i++)
NewTerm(b.termArray[i].coef,b.termArray[i].exp);



Polynomial::~Polynomial()

delete [] termArray;


Polynomial Polynomial::operator+(const Polynomial & b)

Polynomial c;
int aPos=0;
int bPos=0;
while(aPos<terms && bPos<b.terms)
if(termArray[aPos].exp == b.termArray[bPos].exp)
float coef=termArray[aPos].coef+b.termArray[bPos].coef;
if(coef)c.NewTerm(coef,termArray[aPos].exp);
aPos++;bPos++;
else if(termArray[bPos].exp < b.termArray[bPos].exp)
c.NewTerm(b.termArray[bPos].coef,b.termArray[bPos].exp);
bPos++;
else
c.NewTerm(termArray[aPos].coef,termArray[aPos].exp);
aPos++;


while (aPos < terms)
c.NewTerm(termArray[aPos].coef,termArray[aPos].exp);
aPos++;

while (bPos < b.terms)
c.NewTerm(b.termArray[bPos].coef,b.termArray[bPos].exp);
bPos++;

return c;


Polynomial Polynomial::operator*(const Polynomial & b)

Polynomial c;
for(int i=0; i<terms; i++)
for(int j=0; j<b.terms; j++)
float coef = termArray[i].coef*b.termArray[j].coef;
int exp = termArray[i].exp + b.termArray[j].exp;
c.NewTerm(coef,exp);


return c;

void Polynomial::NewTerm(float coef, int exp)

if(terms == capacity)
capacity *= 2;
Term *tmp = new Term[capacity];
copy(termArray,termArray+terms,tmp);
delete [] termArray;
termArray = tmp;

Term ATerm;
ATerm.coef=coef;ATerm.exp=exp;
insertTerm(ATerm);

void Polynomial::insertTerm(const Term & term)

int i;
for(i=0; i<terms && term.exp<termArray[i].exp; i++)

if(term.exp == termArray[i].exp)
termArray[i].coef += term.coef;
if(!termArray[i].coef)
for(int j=i; j<terms-1; j++)
termArray[j]= termArray[j+1];
terms--;

else
for(int j=terms-1; j>=i;j--)
termArray[j+1]=termArray[j];
termArray[i] = term;
terms++;



float Polynomial::Eval(float x)

float res=0.0;
for(int i=0;i<terms; i++)
res += termArray[i].coef * pow(x,termArray[i].exp);

return res;


ostream & operator<<(ostream & o,const Polynomial & poly)

for(int i=0;i<poly.terms-1;i++)
o<<poly.termArray[i].coef<<"x^"<<poly.termArray[i].exp<<" + ";

o<<poly.termArray[poly.terms-1].coef<<"x^"<<poly.termArray[poly.terms-1].exp;
return o;


void test()

Polynomial p1;
p1.NewTerm(3,2);
p1.NewTerm(2.1,3);

Polynomial p2;
p2.NewTerm(1,2);
p2.NewTerm(1,3);
p2.NewTerm(5,1);

cout<<"("<<p1<<") + ("<<p2<<") = "<<p1+p2<<endl;
cout<<"F(x=2) = "<<(p1+p2).Eval(2)<<endl;
cout<<"("<<p1<<") * ("<<p2<<") = "<<p1 * p2<<endl;


int main()

test();
system("Pause");
return 0;

#include <iostream>
#include<algorithm>
using namespace std;

class Polynomial;
class Term//多项式的每一项
friend Polynomial;
public:
float coef;//系数
int exp;//指数
;
class Polynomial//多项式类
friend ostream & operator<<(ostream &o,const Polynomial & poly);
public:
Polynomial();
Polynomial(const Polynomial & poly);
~Polynomial();
Polynomial operator+(const Polynomial & poly);//多项式加法
Polynomial operator*(const Polynomial & poly);//多项式乘法
float Eval(float x);//数x代入多项式求值
void NewTerm(float coef,int exp);//添加一项,若有相同的指数项,则合并
private:
void insertTerm(const Term & term);//项的有序插入
private:
Term *termArray;//非零系数项数组
int capacity;//数组大小
int terms;//非零系数的项数
;
Polynomial::Polynomial()

this->terms=0;
this->capacity=10;
termArray=new Term[this->capacity];

Polynomial::Polynomial(const Polynomial & b)

this->terms=0;
this->capacity=b.capacity;
termArray = new Term[this->capacity];
for(int i=0;i<b.terms;i++)
NewTerm(b.termArray[i].coef,b.termArray[i].exp);



Polynomial::
~Polynomial()

delete [] termArray;


Polynomial Polynomial::operator+(const Polynomial & b)

Polynomial c;
int aPos=0;
int bPos=0;
while(aPos<terms && bPos<b.terms)
if(termArray[aPos].exp == b.termArray[bPos].exp)
float coef=termArray[aPos].coef+b.termArray[bPos].coef;
if(coef)c.NewTerm(coef,termArray[aPos].exp);
aPos++;bPos++;
else if(termArray[bPos].exp < b.termArray[bPos].exp)
c.NewTerm(b.termArray[bPos].coef,b.termArray[bPos].exp);
bPos++;
else
c.NewTerm(termArray[aPos].coef,termArray[aPos].exp);
aPos++;


while (aPos < terms)
c.NewTerm(termArray[aPos].coef,termArray[aPos].exp);
aPos++;

while (bPos < b.terms)
c.NewTerm(b.termArray[bPos].coef,b.termArray[bPos].exp);
bPos++;

return c;


Polynomial Polynomial::operator*(const Polynomial & b)

Polynomial c;
for(int i=0; i<terms; i++)
for(int j=0; j<b.terms; j++)
float coef = termArray[i].coef*b.termArray[j].coef;
int exp = termArray[i].exp + b.termArray[j].exp;
c.NewTerm(coef,exp);


return c;

void Polynomial::NewTerm(float coef, int exp)

if(terms == capacity)
capacity *= 2;
Term *tmp = new Term[capacity];
copy(termArray,termArray+terms,tmp);
delete [] termArray;
termArray = tmp;

Term ATerm;
ATerm.coef=coef;ATerm.exp=exp;
insertTerm(ATerm);

void Polynomial::insertTerm(const Term & term)

int i;
for(i=0; i<terms && term.exp<termArray[i].exp; i++)

if(term.exp == termArray[i].exp)
termArray[i].coef += term.coef;
if(!termArray[i].coef)
for(int j=i; j<terms-1; j++)
termArray[j]= termArray[j+1];
terms--;

else
for(int j=terms-1; j>=i;j--)
termArray[j+1]=termArray[j];
termArray[i] = term;
terms++;



float Polynomial::Eval(float x)

float res=0.0;
for(int i=0;i<terms; i++)
res += termArray[i].coef * pow(x,termArray[i].exp);

return res;


ostream & operator<<(ostream & o,const Polynomial & poly)

for(int i=0;i<poly.terms-1;i++)
o<<poly.termArray[i].coef<<"x^"<<poly.termArray[i].exp<<" + ";

o<<poly.termArray[poly.terms-1].coef<<"x^"<<poly.termArray[poly.terms-1].exp;
return o;


void test()

Polynomial p1;
p1.NewTerm(3,2);
p1.NewTerm(2.1,3);

Polynomial p2;
p2.NewTerm(1,2);
p2.NewTerm(1,3);
p2.NewTerm(5,1);

cout<<"("<<p1<<") + ("<<p2<<") = "<<p1+p2<<endl;
cout<<"F(x=2) = "<<(p1+p2).Eval(2)<<endl;
cout<<"("<<p1<<") * ("<<p2<<") = "<<p1 * p2<<endl;

int main()


test();

system("Pause");

return 0;

测试结果:
Cpp代码
(2.1x^3 + 3x^2) + (1x^3 + 1x^2 + 5x^1) = 3.1x^3 + 4x^2 + 5x^1
F(x=2) = 50.8
(2.1x^3 + 3x^2) * (1x^3 + 1x^2 + 5x^1) = 2.1x^6 + 5.1x^5 + 13.5x^4 + 15x^3
请按任意键继续. . .
(2.1x^3 + 3x^2) + (1x^3 + 1x^2 + 5x^1) = 3.1x^3 + 4x^2 + 5x^1
F(x=2) = 50.8
(2.1x^3 + 3x^2) * (1x^3 + 1x^2 + 5x^1) = 2.1x^6 + 5.1x^5 + 13.5x^4 + 15x^3
请按任意键继续. . .
参考技术A 这个是以前写的作业,希望对你有帮助
#include<stdio.h>
#include<malloc.h>
struct shaguo

float coef;
int expn;
struct shaguo*next;
;
void main()

struct shaguo*head1,*head2,*p1,*p2,*p,*head3,*p3;
int n=1;

head3=(struct shaguo*)malloc(sizeof(struct shaguo));
p1=p2=head1=(struct shaguo*)malloc(sizeof(struct shaguo));
p1=p2=(struct shaguo*)malloc(sizeof(struct shaguo));
printf("请输入第一个多项式\n");
scanf("%f%d",&p1->coef,&p1->expn);
head1->next=p1;
while(p1->coef!=0&&p1->expn!=0)


p2=p1;
p1=(struct shaguo*)malloc(sizeof(struct shaguo));
scanf("%f%d",&p1->coef,&p1->expn);
p2->next=p1;

p2->next->next=NULL;
p1=p2=head2=(struct shaguo*)malloc(sizeof(struct shaguo));
p1=p2=(struct shaguo*)malloc(sizeof(struct shaguo));
printf("请输入第二个多项式\n");
scanf("%f%d",&p1->coef,&p1->expn);
head2->next=p1;
while(p1->coef!=0&&p1->expn!=0)


p2=p1;
p1=(struct shaguo*)malloc(sizeof(struct shaguo));
scanf("%f%d",&p1->coef,&p1->expn);
p2->next=p1;


p2->next->next=NULL;
p1=head1->next;
p2=head2->next;

p=(struct shaguo*)malloc(sizeof(struct shaguo));
int num=0;
while(p1->coef!=0&&p1->expn!=0)

p2=head2->next;
while(p2->coef!=0&&p2->expn!=0)

p->coef=p1->coef*p2->coef;
p->expn=p1->expn+p2->expn;
num++;
if(num==1)

head3->next=p;
p3=p;

else

p3->next=p;
p3=p;

p=(struct shaguo*)malloc(sizeof(struct shaguo));

p2=p2->next;

p1=p1->next;


p3->next=(struct shaguo*)malloc(sizeof(struct shaguo));
p3->next->coef=0;
p3->next->expn=0;
p3->next->next=NULL;

p=head3;
p3=head3->next;
p1=head3->next;
n=0;
while(p3->coef!=0&&p3->expn!=0)

p=p3;
p1=p3->next;
while(p1->coef!=0&&p1->expn!=0)

n++;

if(p3->expn==p1->expn)

p3->coef=p3->coef+p1->coef;
p1=p1->next;
free(p->next);
p->next=p1;
n=0;

if(n)

p1=p1->next;
p=p->next;


p3=p3->next;

p1=head3->next;
printf("两多项式相乘:\n");
while(p1->coef!=0&&p1->expn!=0)

printf("%f,%d ",p1->coef,p1->expn);
p1=p1->next;


本回答被提问者采纳
参考技术B 这么多。傻子看懂。你找他吧

链表多项式乘法

【中文标题】链表多项式乘法【英文标题】:Linked list polynomial multiplication 【发布时间】:2017-03-08 03:55:24 【问题描述】:

我编写了一个程序,以单链表的形式将两个多项式相乘。我无法使用此代码打印输出。

我得到的输出是

1st Number: 5x^2 + 4x^1 + 2x^0
2nd Number: 5x^1 + 5x^0
Multiplied polynomial:

我该如何解决这个问题?

我的代码:

// C++ program for multiplication of two polynomials
// using Linked Lists
#include<bits/stdc++.h>
using namespace std;

// Node structure containing power and coefficient of variable
struct node

    int coeff;
    int exp;
    struct node *next;
;
void padd(float, int, node**);          
// Function to create new node
void create_node(int x, int y, struct node **temp)

    struct node *r,*z ;
    z = *temp;
    if(z == NULL)
    
        r =(struct node*)malloc(sizeof(struct node));
        r->coeff = x;
        r->exp = y;
        *temp = r;
        r->next = (struct node*)malloc(sizeof(struct node));
        r = r->next;
        r->next = NULL;
    
    else
    
        r->coeff = x;
        r->exp = y;
        r->next = (struct node*)malloc(sizeof(struct node));
        r = r->next;
        r->next = NULL;
    


// Function Multiplying two polynomial numbers
void polymul ( struct node *poly1, struct node *poly2,
                   struct node *poly )

    struct node *y1 ;
    float coeff1;
    int exp1 ;

    y1 = poly2 ;  /* point to the starting of the second linked list */
if ( poly1 == NULL && poly2 == NULL )
        return ;

    /* if one of the list is empty */
if ( poly1 == NULL )
        poly = poly2 ;
    else
    
        if ( poly2 == NULL )
            poly = poly1 ;
        else/* if both linked lists exist */

        
            /* for each term of the first list */
            while ( poly1 != NULL )
            
                /* multiply each term of the second linked list with a 
                    term of the first linked list */
                while ( poly2 != NULL )
                
                    coeff1 = poly1 -> coeff * poly2 -> coeff ;
                    exp1 = poly1 -> exp + poly2 -> exp ;
                    poly2 = poly2 -> next ;

                    /* add the new term to the resultant polynomial */

                    padd ( coeff1, exp1, &poly ) ;
                

                poly2 = y1 ;  /* reposition the pointer to the starting of
                         the second linked list */


                poly1 = poly1 -> next ;  /* go to the next node */

            
        
    


/* adds a term to the polynomial in the descending order of the exponent */
void padd ( float coeff, int exp, struct node **s )

    struct node *r, *temp = *s ;

    /* if list is empty or if the node is to be inserted before the first node */
if ( *s == NULL || exp > ( *s ) -> exp )
    
        *s=r = (struct node*) malloc ( sizeof ( struct node ) ) ;
        (*s) -> coeff = coeff ;
        (*s) -> exp = exp ;
        (*s)-> next = temp ;
    
    else
    
        /* traverse the entire linked list to search the position to insert a new node */
        while ( temp != NULL )
            
                if ( temp -> exp == exp )
                
                    temp -> coeff += coeff ;
                    return ;
                

                if ( temp -> exp > exp && ( temp -> next -> exp < exp ||    temp -> next == NULL ) )
                    
                        r = (struct node* )malloc ( sizeof ( struct node ) ) ;
                        r -> coeff = coeff;
                        r -> exp = exp ;
                        r -> next = temp -> next ;
                        temp -> next = r ;
                        return ;
                    

            temp = temp -> next ;  /* go to next node */

            

        r -> next = NULL ;
        temp -> next = r ;
    


// Display Linked list
void show(struct node *node)

while(node->next != NULL)
    
    printf("%dx^%d", node->coeff, node->exp);
    node = node->next;
    if(node->next != NULL)
        printf(" + ");
    


// Driver program
int main()

    struct node *poly1 = NULL, *poly2 = NULL, *poly = NULL;

    // Create first list of 5x^2 + 4x^1 + 2x^0
    create_node(5,2,&poly1);
    create_node(4,1,&poly1);
    create_node(2,0,&poly1);

    // Create second list of 5x^1 + 5x^0
    create_node(5,1,&poly2);
    create_node(5,0,&poly2);

    printf("1st Number: "); 
    show(poly1);

    printf("\n2nd Number: ");
    show(poly2);

    poly = (struct node *)malloc(sizeof(struct node));

    // Function multiply two polynomial numbers
    polymul(poly1, poly2, poly);

    // Display resultant List
    printf("\nMultiplied polynomial: ");
    show(poly);

return 0;

【问题讨论】:

附带说明:声明struct 会自动使struct 名称成为类型名称,并且您不需要重复struct 字,另外,更喜欢new / @987654327 @ 超过malloc / freemalloc 不调用构造函数,new 不需要强制转换(C 中的 malloc 也不需要)。 【参考方案1】:

你应该在函数polymul之前声明你的函数padd(),或者你可以在顶部写一个函数原型,以便编译器知道函数padd将在polymul之后遇到。

对于第二个错误,您应该将 malloc 函数的输出类型转换为 struct node *,因为 malloc 返回 void * 类型值。

只需将类型转换添加到代码中的 malloc 函数即可。

r = (struct node*)malloc ( sizeof ( struct node ) ) ;

链表中存在一些指针问题。我已经在 ideone 链接中修复了它们。

 #include<bits/stdc++.h>

   using namespace std;

// Node structure containing power and coefficient of variable

   struct node
   
    int coeff;
    int exp;
    struct node *next;
;

// Function to create new node


void create_node(int x, int y, struct node **temp)


    struct node *r, *tmp=NULL ;

    if(*temp == NULL) // If the list is NULL then add node at First position
    
        r =(struct node*)malloc(sizeof(struct node));
        r->coeff = x;
        r->exp = y;
        r->next = NULL;
        *temp = r;
        /*r->next = (struct node*)malloc(sizeof(struct node));
        r = r->next;
        r->next = NULL;*/ //Not needed
    
    else
    
        tmp = *temp;
        while (tmp->next != NULL) 
            tmp = tmp -> next; //Travel to the end of linked list
        
        r = (struct node*)malloc(sizeof(struct node)); 
        r->coeff = x;
        r->exp = y;
        r->next = NULL;
        tmp->next = r; //Add new node to the list

    


// Function Adding two polynomial numbers

 /* adds a term to the polynomial in the descending order of the exponent */

    void padd ( int coeff, int exp, struct node **s )
   
    struct node *r, *temp = *s ;
    struct node *tmp = *s;
    /* if list is empty or if the node is to be inserted before the first node 
    */



    if ( temp == NULL || exp > ( temp ) -> exp )

    
        r = (struct node*)malloc ( sizeof ( struct node ) ) ;
        r -> coeff = coeff ;
        r -> exp = exp ;
        r -> next = temp ;
        temp = r;
        *s = r;
    
    else
    
        /* traverse the entire linked list to search the position to insert 
        a new node */
        while ( temp != NULL )
            
                if ( temp -> exp == exp )
                
                    temp -> coeff += coeff ;
                    return;
                 else if ( temp -> exp > exp && ( temp -> next -> exp < exp ||temp ->next == NULL ) )
                    
                        r = (struct node*)malloc ( sizeof ( struct node ) ) ;
                        r -> coeff = coeff;
                        r -> exp = exp ;
                        r -> next = temp -> next ;
                        temp -> next = r ;
                        return;
                    

                temp = temp -> next ;  /* go to next node */

            

        r -> next = NULL ;
        temp -> next = r ;
    


   struct node * polymul ( struct node *poly1, struct node *poly2, struct node *poly3)
   

    struct node *y1 ;
    int coeff1;
    int exp1 ;

    struct node *poly = poly3;
    y1 = poly2 ;         /* point to the starting of the second linked list */
    if ( poly1 == NULL && poly2 == NULL )
        return NULL;

    /* if one of the list is empty */
    if ( poly1 == NULL ) 
        poly = poly2 ;
     else
    
        if ( poly2 == NULL )
            poly = poly1 ;
        else    /* if both linked lists exist */

        
            /* for each term of the first list */
            while ( poly1 != NULL )
            
                /* multiply each term of the second linked list with a 
                    term of the first linked list */
                while ( poly2 != NULL )
                
                    coeff1 = poly1 -> coeff * poly2 -> coeff ;
                    exp1 = poly1 -> exp + poly2 -> exp ;
                    poly2 = poly2 -> next ;

                    /* add the new term to the resultant polynomial */

                    padd( coeff1, exp1, &poly) ;
                

                poly2 = y1 ;  /* reposition the pointer to the starting of
                                the second linked list */


                poly1 = poly1 -> next ;  /* go to the next node */

            
        
    
    return poly;




// Display Linked list
    void show(struct node *node)
    
        while(node != NULL) // if we use node->next != NULL while will break at the last node skipping it
        
            printf("%dx^%d", node->coeff, node->exp);

            if(node->next != NULL)
                printf(" + ");

            node = node->next;
        
    

// Driver program

    int main()
    
    struct node *poly1 = NULL, *poly2 = NULL, *poly = NULL;

    // Create first list of 5x^2 + 4x^1 + 2x^0

    create_node(5,2,&poly1);
    create_node(4,1,&poly1);
    create_node(2,0,&poly1);

    // Create second list of 5x^1 + 5x^0

    create_node(5,1,&poly2);
    create_node(5,0,&poly2);

    printf("1st Number: "); 
    show(poly1);

    printf("\n2nd Number: ");
    show(poly2);

    poly = (struct node *)malloc(sizeof(struct node));

    // Function add two polynomial numbers

    poly = polymul(poly1, poly2, poly);

    // Display resultant List

    printf("\nAdded polynomial: ");
    show(poly);

return 0;

Ideone Link

【讨论】:

它确实解决了我的错误。但是现在,我无法获得两个多项式相乘的所需输出。 @JaiPrakash 您的链接列表中有几个错误。你的ceate_node 函数错了,你的show 函数错了。您需要了解链表并自己调试代码。 我看不出我的 create_node () 函数和 show() 函数是如何出错的。我认为唯一的问题是与此代码混淆的指针。 @JaiPrakash 您创建了 2 个多项式 5x^2 + 4x^1 + 2x^05x^1 + 5x^0,但显示功能仅打印第一个元素。您的 create node 没有将节点附加到列表中。此外,您的 show 函数不会打印列表的最后一个节点。首先,更正您无法正常工作的代码。 @JaiPrakash 现在检查代码。我已经修复了所有的错误。但是你在指针上犯了很多错误。了解指针,否则您将再次遇到错误。

以上是关于c++编程 多项式的乘法的主要内容,如果未能解决你的问题,请参考以下文章

数据结构线性结构 —— 编程作业 02 :一元多项式的乘法与加法运算

实现多项式的加法和乘法运算

两个多项式系数的卷积

C语言求多项式乘法

最小二乘法拟合与多项式拟合的关系是啥?

UOJ #34. 多项式乘法