一元多项式相加改怎么做啊

设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表分别存储一个一元多项式,现要求编写程序实现两个多项式的加法运算。如多项式A(x)和多项式B(x)相加得到多项式C(x)。

创建一个同样长度的新链表,链表中每个节点的值为a和b对应节点的data值相加


可以参考这篇文章中的f(x)
希望对你有所帮助。

int * qrcode::error_correcting_encode::ErrorCorrectingEncode::get_generator_polynomial(int length){
    // this function do this:
    //  a0 a0
    //       a1a0    a1a0
    //  a0 a0^a1a0 a1a0
    init();
    member_generator_polynomial = new int[2]{0, 0};
    for (int temp = 2; temp < length + 1; temp++){
        
        int * temp_polynomial = new int[temp];
        int * result_polynomial = new int[temp + 1];
        for (int i = 0; i < temp; i++){
            temp_polynomial[i] = member_generator_polynomial[i] + temp - 1;
            if (temp_polynomial[i] > 255){
                temp_polynomial[i] %= 255;
            }
        }
        
        for (int i = 0; i < temp + 1; i++){
            if (0 == i){
                result_polynomial[i] = 0;
            }
            else if (temp==i){
                result_polynomial[i] = temp_polynomial[i - 1];
            }
            else{
                int first_line = member_position[member_generator_polynomial[i]];
                int last_line = member_position[temp_polynomial[i - 1]];
                int result = first_line^last_line;
                result_polynomial[i] = member_negation[result];
            }
        }
        delete[] member_generator_polynomial;
        member_generator_polynomial = nullptr;
        
        member_generator_polynomial = new int[temp + 1];
        memcpy(member_generator_polynomial, result_polynomial, sizeof(int)*(temp + 1));
        
        delete [] temp_polynomial;
        temp_polynomial = nullptr;
        
        delete [] result_polynomial;
        result_polynomial = nullptr;
    }
    destory();
    return member_generator_polynomial;
}

合并同类项很简单。主要就是要动态建立多项式系数。
以最高次来建立多项式。
如果低次系数为0,那么就将对应的系数存为0
注意合并同类项就能完成多项式加法。
由于我这里做的操作是qrcode多项式纠错码编写。所以与题意相似,但并不完全符合。因为操作中需要多次建立新数组。且运算法则是异或运算。
而多项式加法运算只有一步,且运算法则是加法运算。请注意区分。