设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表分别存储一个一元多项式,现要求编写程序实现两个多项式的加法运算。如多项式A(x)和多项式B(x)相加得到多项式C(x)。
创建一个同样长度的新链表,链表中每个节点的值为a和b对应节点的data值相加
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多项式纠错码编写。所以与题意相似,但并不完全符合。因为操作中需要多次建立新数组。且运算法则是异或运算。
而多项式加法运算只有一步,且运算法则是加法运算。请注意区分。