乘法任意长度多项式的算法?

时间:2014-09-20 00:52:01

标签: c polynomial-math

假设我们将多项式表示为浮点数组,其中多项式中每个项的程度对应于数组中的索引(例如。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]);
    }
}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

我相信这可以做你想要的:

// 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];
}

Ideone example of this function

答案 1 :(得分:1)

#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);


}