假设我们将多项式表示为浮动数组,其中多项式中每个项的程度对应于数组中的索引(例如。4.2x^5+x^2-1.4
将表示为{-1.4, 0, 1, 0, 0, 4.2}
。
我的任务问题是用C编写一个方法,将两个任意长度的多项式相乘并打印出结果(而不是返回结果)。
通常情况下,当我问问题时,我会包括到目前为止我尝试过的内容,但我对这个问题完全一无所知。这就是我所拥有的一切
void multpoly(float *a, int len_a, float *b, int len_b)
{
for(i = 0; i < len_result; i++)
{
printf(" %.5f, ", product[i]);
}
}
任何帮助都将不胜感激!
发布于 2014-09-19 17:41:12
我相信这能做你想做的:
// constraints: 'result' must have space for at least len1 + len2 - 1 elements.
void multpoly(const float *poly1, int len1, const float *poly2, int len2, float *result)
{
int i, p1i, p2i;
int len_result = len1 + len2 - 1;
for (i = 0; i < len_result; i++) result[i] = 0.0;
for (p1i = 0; p1i < len1; ++p1i)
for (p2i = 0; p2i < len2; ++p2i)
result[p1i + p2i] += poly1[p1i] * poly2[p2i];
}
发布于 2014-09-19 17:39:17
#include <stdio.h>
#include <string.h>
main()
{
float a[5]={1, 2, 3};
float b[5]={2, 0, 1};
printPol(a, b, 3, 3);
}
void printPol(float*a, float*b, int len1, int len2)
{
int i, j;
// order of resulting poly is o1+o2
// o1 = len1 -1
// o2 = len2 -1
// length is order + 1 (+1 is the constant number)
int len = (len1-1)+(len2-1)+1;
float res[len];
//initialize
for(i=0;i<len; i++) res[i] = 0;
for(i=0; i<len1; i++)
for(j=0; j<len2; j++)
{
// mutually multiply all elements
res[i+j] += a[i]*b[j];
}
printf("%f ", res[0]);
for(i=1;i<len; i++) printf("+%f*x^%d ", res[i], i);
}
https://stackoverflow.com/questions/25944168
复制相似问题