求解多个多项式相乘的系数 。数组作为承载多项式的载体,例
| a[0] | a[1] | a[...] | a[n] |
数组下标对应未知数的次幂(x^n),数组项对应当前阶数的系数(a[n]);由初始化Init、两个多项式相乘PolyMul、多项式打印PolyPrint三个函数构成。
#include#include #define MAX 100 #define MIN 10 //存放结果的全局变量 int res[MAX]; //数组下标对应x的阶,数组内容对应该阶的系数 //初始化,返回该数组的长度 int Init(int *a) { int len; puts("请输入多项式的最高次幂!"); scanf_s("%d", &len); puts("请输入多项式的系数!"); for (int i = 0; i <= len; i++) { scanf_s("%d", &a[i]); } return len+1; } //两个多项式相乘,返回当前res的长度变量 int PolyMul(int *a, int a_len, int *b, int b_len) { int tmp[MAX]; memset(tmp, 0, MAX * sizeof(int)); for (int i = 0; i < a_len; i++) for (int j = 0; j < b_len; j++) tmp[i + j] += a[i] * b[j]; // memset(res, 0, MAX * sizeof(int)); int len = a_len + b_len - 1; for (int i = 0; i < len; i++) res[i] = tmp[i]; return len; } //打印 void PolyPrint(int * a,int len) { int i = 0; printf("(%d)x^%d", a[i], i); for (int i = 1; i < len; i++) printf("+ (%d)x^%d", a[i] ,i); puts(" "); } int main() { memset(res, 0, MAX * sizeof(int)); int a[MIN]; int b[MIN]; int c[MIN]; int n, len; puts("Please enter the number of the polynomial"); scanf_s("%d", &n); //the length of array int a_len, b_len, c_len; if (n == 1) { a_len = Init(a); PolyPrint(a, a_len); } else { a_len = Init(a); b_len = Init(b); len = PolyMul(a, a_len, b, b_len); //PolyPrint(res, len); n -= 2; while (n>0) { c_len = Init(c); len = PolyMul(res, len, c, c_len); n--; } PolyPrint(res, len); } return 0; }



