2014-09-20 3 views
0

Допустим, мы представим полиномы как массив поплавки, где степень каждого элемента многочлена соответствует индексу в массиве (например, 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]); 
    } 
} 

Любая помощь будет принята с благодарностью!

+1

Compute следующее вручную и опубликовать результат: '(ах^2 + BX + C) * (дх^5 + ex^2 + f) '. – user3386109

+0

@ user3386109 Что? Как это связано с вопросом? – python

+0

@python Uhm, давайте посмотрим, название гласит «умножение произвольных многочленов длины». Что ты думаешь, что это значит? – user3386109

ответ

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

+0

Да, это работает, но кто-то был быстрее вас;) – chouaib

+2

Stackoverflow - это не гонка. – Wug

+0

Вы правы, но в чем смысл добавить идентичный ответ! Я имею в виду, что это уже есть! в любом случае, отредактируйте свой ответ, потому что я не вижу, где ваш код должен «распечатывать результат (а не возвращать его)». – chouaib

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


} 
+0

"Порядок получения poly is o1 * o2" Нет, очевидно, нет. –

+0

thnx @ T.C. Редактирование было сделано соответственно – chouaib

Смежные вопросы