fatal.h
#include <stdio.h>
#include <stdlib.h>
#define Error( Str ) FatalError( Str )
#define FatalError( Str ) fprintf( stderr, "%s\n", Str ), exit( 1 )
Polynomial.cpp
#include "fatal.h"
#define MaxDegree 100 // 幂的最大次数是100
typedef struct
{
int CoeffArray[MaxDegree + 1]; // 系数数组,这里定义了数组是很大的,所以下面要单独用一个HighPower来存最高次幂
int HighPower; //高次幂
}* Polynomial;
// 将多项式初始化为零的过程
void ZeroPolynomial(Polynomial Poly)
{
int i;
for(i = 0; i <= MaxDegree; i++)
Poly->CoeffArray[i] = 0;
Poly->HighPower = 0;
}
int Max(int h1, int h2)
{
return h1 > h2 ? h1 : h2;
}
// 两个多项式相加的过程
void AddPolynomial(const Polynomial Poly1, const Polynomial Poly2, Polynomial PolySum)
{
int i;
ZeroPolynomial(PolySum);
PolySum->HighPower = Max(Poly1->HighPower, Poly2->HighPower);
for(i = PolySum->HighPower; i >= 0; i--)
PolySum->CoeffArray[i] = Poly1->CoeffArray[i] + Poly2->CoeffArray[i];
}
// 两个多项式相乘的过程
void MultPolynomial(const Polynomial Poly1, const Polynomial Poly2, Polynomial PolyProd)
{
int i, j;
ZeroPolynomial(PolyProd);
PolyProd->HighPower = Poly1->HighPower + Poly2->HighPower;
if(PolyProd->HighPower > MaxDegree)
Error("Exceeded array size");
else
for(i = 0; i <= Poly1->HighPower; i++)
for(j = 0; j <= Poly2->HighPower; j++)
PolyProd->CoeffArray[i + j] += Poly1->CoeffArray[i] * Poly2->CoeffArray[i];
}
void PrintPoly(const Polynomial Q)
{
int i;
for (i = Q->HighPower; i > 0; i--)
printf("%dx^%d + ", Q->CoeffArray[i], i); // CoeffArray[i]代表系数,i代表指数
printf("%d\n", Q->CoeffArray[0]);
}
// 测试函数
int main()
{
Polynomial P, Q;
P = (Polynomial) malloc(sizeof(*P));
Q = (Polynomial) malloc(sizeof(*Q));
P->HighPower = 1;
P->CoeffArray[0] = 1;
P->CoeffArray[1] = 1; // P = x + 1
MultPolynomial(P, P, Q); // Q = P * P = x^2 + 2x + 1
MultPolynomial(Q, Q, P); // P = Q * Q = x^4 + 4x^3 + 6x^2 + 4x + 1
AddPolynomial(P, P, Q); // Q = P + P = 2x^4 + 8x^3 + 12x^2 + 8x^1 + 2
// 打印结果
PrintPoly(Q);
return 0;
}
- 参考:《数据结构与算法分析C语言描述》
- 多项式ADT(数组存储多项式系数和指数)笔记