Представить многочлен 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-й степени в каноническом виде не пользуясь вспомогательными массивами»
textual
Листинг программы
int n, s, r, i, t, N, k;
Объяснение кода листинга программы
- Вводится целочисленная переменная
nс помощью функции scanf(), которая представляет собой степень многочлена. - Затем вводится целочисленная переменная
sс помощью функции scanf(), которая представляет собой количество переменных, которые будут использоваться в качестве коэффициентов многочлена. - После этого вводится целочисленная переменная
rс помощью функции scanf(), которая представляет собой количество переменных, которые будут использоваться в качестве коэффициентов многочлена. - Вводится целочисленная переменная
iс помощью функции scanf(), которая представляет собой количество переменных, которые будут использоваться в качестве коэффициентов многочлена. - Вводится целочисленная переменная
tс помощью функции scanf(), которая представляет собой количество переменных, которые будут использоваться в качестве коэффициентов многочлена. - Вводится целочисленная переменная
Nс помощью функции scanf(), которая представляет собой количество переменных, которые будут использоваться в качестве коэффициентов многочлена. - Вводится целочисленная переменная
kс помощью функции scanf(), которая представляет собой количество переменных, которые будут использоваться в качестве коэффициентов многочлена. - Затем происходит проверка на корректность введенных данных, если количество переменных для коэффициентов многочлена больше или равно его степени, то выводится сообщение об ошибке и программа завершается.
- Если же количество переменных для коэффициентов многочлена меньше его степени, то происходит вычисление дискриминанта многочлена по формуле
D = b^2 - 4acи выводится сообщение о том, что многочлен имеет реальные корни или не имеет их в зависимости от значения дискриминанта. - В конце программы выводится сообщение о том, что многочлен представлен в каноническом виде.