Представить многочлен n-й степени в каноническом виде не пользуясь вспомогательными массивами - C (СИ)

Формулировка задачи:

Многочлен n-й степени задан следующим образом: c0 · (x − c1)· · ·(x − cn), где ci – целые числа. Требуется представить его в каноническом виде: a0 + a1 · x + · · · + an · x. Коэффициенты ai получаются путем преобразования ci в исходном массиве. При решении задачи запрещается использовать вспомогательные массивы. Хотел сделать так: эти коэффициенты сбить в массив, первым циклом считать первое произведение у каждой степени икса, и потом еще одним циклом (внутри) прибавлять к нему следующие произведения. Но как то то считает. Помогите найти ошибку или расскажите правильный алгоритм.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*
    Функция раскрывает скобки мономов. На вход подаются коеффициенты x1 x2 x3
    из выражений вида (x-x1)(x-x2)(x-x3)...(x-xn)
    В выходном массиве будут коеффициенты при x^n, ..., x^3, x^2, x, Const
*/
 
int main(){
      // 2(x-3)(x-5)(x-1) >> input : 2 3 5 1 >> output: 2x^3 - 18x^2 + 46x - 30
    int n, s, r, i, t, N, k;
    int B[100];
    scanf("%d", &N);
    for(i = 0; i <= N; ++i){
        scanf("%d", &B[i]);
    }
    r = B[0];
    //k = 0;
    //t = 0;
    for (n = 1; n < N; ++n){
        k = B[n];
        B[n] = B[n] * B[0];
        //k = B[n];
        for (i = 1; i < N; ++i){
            t = B[n];
            B[i] = -B[0] * B[i] + t;
            //t = B[n];
        }
    }
    B[0] = r;
    B[N] = -B[N];
    for(i = 0; i <= N; ++i){
        printf("%d ", B[i]);
    }
    return 0;
}

Код к задаче: «Представить многочлен n-й степени в каноническом виде не пользуясь вспомогательными массивами - C (СИ)»

textual
int n, s, r, i, t, N, k;

14   голосов, оценка 4.071 из 5


СОХРАНИТЬ ССЫЛКУ