С. Алгебраическая проблема

Даны числа d — степень полинома, массив K—коэффициенты полинома P(x) и число а. Требуется найти и вывести коэффициенты произведения полинома P(x) на (x–a).
Input
Со стандартного устройства ввода в первой строке вводится целое число d (1 <= d <= 1000) степень полинома, во второй строке вводятся (d+1) целых чисел — массив K (-1000 <= Ki <= 1000)—коэффициенты при членах в полиноме от старшей степени к младшей. В третьей вводится число а (-1000 <= a <= 1000).
Output
Требуется найти и вывести коэффициенты произведения полинома P(x) на (x–a). Выводить пробел в конце строки не нужно.

Sample Input

2
2 0 3
-4

Sample Output

2 8 3 12

мой код:

#include <stdio.h>
int main()
{
    int d,k[1000],a,b[1000],i;
    scanf("%d", &d);
    for (i = 0; i <= d; i++)
    scanf("%d", &k[i]);
    scanf("%d", &a);
    b[0] = k[0];
    for (i = 1; i <= d + 1; i++) {
        if (i != d + 1) b[i] = k[i] - (k[i - 1] * a);
        else b[i] = 0 - (k[i - 1] * a);
    }
    for (i = 0; i <= d + 1; i++)
        if (i != d + 1) printf("%d ", b[i]);
        else printf("%d", b[i]);
    return 0;
}

Набирает 70 из 100. Что не так?


Ответы (2 шт):

Автор решения: MBo

Всё выглядит нормально, кроме того, что полином степени 1000 имеет 1001 коэффициент, а результат 1002

 k[1002],b[1002]
→ Ссылка
Автор решения: Mikhailo

Выделять массив коэффициентов можно динамически, а массив b и не нужен совсем. Такой код проходит?

#include <stdio.h>
#include <stdlib.h>
int main() {
    int d,a;
    scanf("%d", &d);
    int * k = malloc(sizeof(int)*(d+1));
    for (int i = 0; i <= d; i++) scanf("%d", k+i);
    scanf("%d", &a);
    for (int i = 0; i <= d + 1; i++) {
        int b;
        if (i == 0) b = k[0];
        else if (i == d+1) b = -a*k[d];
        else b = k[i] - a*k[i-1];
        printf("%d ", b);
        }
    free(k);
    }
→ Ссылка