С. Алгебраическая проблема
Даны числа 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 шт):
Всё выглядит нормально, кроме того, что полином степени 1000 имеет 1001 коэффициент, а результат 1002
k[1002],b[1002]
Выделять массив коэффициентов можно динамически, а массив 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);
}