确定两个多项式相乘结果中的项数

Determining the number of terms in the result of the multiplication of two polynomials

本文关键字:结果 多项式 两个      更新时间:2023-10-16

这是一个c++程序,它对多项式执行不同的操作。在这个程序中,multiplication()函数有一个逻辑问题。我不能算出结果多项式中的项数,它是两个多项式相乘的结果。

该程序在大多数情况下给出正确的乘法输出,但在少数情况下,乘法没有正确执行。以下是完整的程序。

#include<iostream>
using namespace std;
struct poly
{
    int coef, pow;
};
int k=0;
poly* getdata(poly *a,int n)
{
    for(int i=0; i<n; i++)
    {
        cout<<"n Enter the coefficient and power of the term";
        cin>>a[i].coef>>a[i].pow;
    }
    return a;
}
poly* add(poly *c, poly *a, poly *b, int n1, int n2)
{
    int i=0, j=0;
    while(i<n1 && j<n2)
    {
        if(a[i].pow<b[j].pow)
        {
            c[k].pow = a[i].pow;
            c[k].coef = a[i].coef;
            i++;
            k++;
        }
        else if(a[i].pow == b[j].pow)
        {
            c[k].pow = a[i].pow;
            c[k].coef = a[i].coef+b[j].coef;
            i++; j++; k++;
        }
        else
            //(a[i].pow > b[j].pow)
        {
            c[k].pow = b[j].pow;
            c[k].coef = b[j].coef;
            j++; k++;
        }
    }
    while(i<n1)
    {
        c[k].pow = a[i].pow;
        c[k].coef = a[i].coef;
        i++;
        k++;
    }
    while(j<n2)
    {
        c[k].pow = b[j].pow;
        c[k].coef = b[j].coef;
        j++; k++;
    }
    return c;
}
void display(poly *p,int n)
{
    int i;
    cout<<"n The polynomial is :-n";
    for(i=0; i<n-1; i++)
    {
        cout<<p[i].coef<<"x^"<<p[i].pow<<"+";
    }
    cout<<p[i].coef<<"x^"<<p[i].pow;
    cout<<endl;
}
void multiplication(poly *c, poly *a, poly* b, int n1, int n2)
{
    int i, j;
    //int count = 0;
    for(i=0; i<n1*n2; i++)
    {
        c[i].coef = 0;
        c[i].pow = 0;
    }
    for(i=0; i<n1; i++)
    {
        for(j=0; j<n2; j++)
        {
            c[i+j].coef = a[i].coef*b[j].coef + c[i+j].coef;
            c[i+j].pow = a[i].pow + b[j].pow;
        }
    }
    //return count;
}
int main()
{
    poly a[10], b[10], c[10];
    poly *p, *q , *result;
    int n1, n2;
    cout<<"n Enter the number of terms in polynomial 1 : ";
    cin>>n1;
    p = getdata(a,n1);
    display(p, n1);
    cout<<"n Enter the number of terms in polynomial 2 : ";
    cin>>n2;
    q = getdata(b,n2);
    display(q, n2);
    result = add(c, a, b, n1, n2);
    cout<<"n The Sum of the two polynomial is ";
    display(result, k);
    poly *mresult;
    mresult = new poly[n1+n2];
    multiplication(mresult, a, b, n1, n2);
    cout<<"n The Multiplication of the two polynomials is :- ";
    display(mresult,n1+n2-1);
    return 0;
}

少数情况下的输出:-

 Enter the number of terms in polynomial 1 : 2
 Enter the coefficient and power of the term1
1
 Enter the coefficient and power of the term3
9
 The polynomial is :-
1x^1+3x^9
 Enter the number of terms in polynomial 2 : 2
 Enter the coefficient and power of the term1
3
 Enter the coefficient and power of the term2
6
 The polynomial is :-
1x^3+2x^6
 The Sum of the two polynomial is 
 The polynomial is :-
1x^1+1x^3+2x^6+3x^9
 The Multiplication of the two polynomials is :- 
 The polynomial is :-
1x^4+5x^12+6x^15

这是正确的。但是考虑这种情况:-

 Enter the number of terms in polynomial 1 : 2
 Enter the coefficient and power of the term1
1
 Enter the coefficient and power of the term3
9
 The polynomial is :-
1x^1+3x^9
 Enter the number of terms in polynomial 2 : 2
 Enter the coefficient and power of the term1
3
 Enter the coefficient and power of the term2
6
 The polynomial is :-
1x^3+2x^6
 The Sum of the two polynomial is 
 The polynomial is :-
1x^1+1x^3+2x^6+3x^9
 The Multiplication of the two polynomials is :- 
 The polynomial is :-
1x^4+5x^12+6x^15

这是错误的。这里的乘法应该是:- x^4+2x^7+3x^12+6x^15

还有一些逻辑我已经尝试过了,例如:-

int multiplication(poly *c, poly *a, poly* b, int n1, int n2)
{
    int i, j;
    int count = 0;
    for(i=0; i<n1*n2; i++)
    {
        c[i].coef = 0;
        c[i].pow = 0;
    }
    for(i=0; i<n1; i++)
    {
        for(j=0; j<n2; j++)
        {
            c[count].coef = a[i].coef*b[j].coef + c[count].coef;
            c[count].pow = a[i].pow + b[j].pow;
            if(c[count].pow != c[count-1].pow) count++;
        }
    }
    return count;
}

此函数返回多项式c中的项数。

注意:- c是两个多项式a和b相乘的结果。

fgx的多项式时,f xg的次数是f的次数加上g的次数。得到的多项式的系数将是几对乘积的和;当(f_2 x^2 + f_1 x + f_0)(g_2 x^2 + g_1 x + g_0)时,x^2的系数为f_2*g_0 + f_1*g_1 + f_0*g_2。你不会事先知道这些和是否等于零。二项式(x+1)(x+1)有三个非零项,但(x+1)(x-1)有两个,(x^2+1)(x^4+x^3)有四个。

你可以有效地计算这个多项式,把它的系数加在一个向量中,这个向量的索引是每一项的度。

您希望逻辑更像这样:

for(i=0; i<n1; i++)
{
    for(j=0; j<n2; j++)
    {
        int coef = a[i].coef * b[j].coef;
        int pow = a[i].pow + b[j].pow;
        count = add_term_to(c,count,coef,pow);
    }
}

现在您只需要实现add_term_to(),使其组合具有相同幂的项。