массивы — Умножение полиномов в переполнении стека

Я ввожу массив и код должен умножить этот массив на (x^2 + 2*A*X + A^A),
например массив 1, 3, 3, 1 должен иметь ответ 1, 5, 10, 10, 5, 1 если A = 1, Я пытался написать код, но я понятия не имею, как я должен умножать многочлены в C ++.

КОД

#include "pch.h"#include <iostream>

int main()
{
int a, n;

std::cout << "Enter the Power n: "; //Power decides the size of array.
std::cin >> n;

std::cout << "Enter the number A: ";
std::cin >> a;

int arr_size = n + 1;

int *array = new int[2 * arr_size];

std::cout << "Enter the array P(X): ";

for (int i = 0; i < arr_size; i++)
{
std::cin >> array[i];
}

for (int i = 0; i < arr_size; i++)
std::cout << array[i] << " ";

const int x = 1;
for (int i = 0; i < arr_size; i++) {
array[i] = array[i] * x ^ 2;
array[i] = array[i] * (2 * a*x);
array[i] = array[i] * (a * a);

std::cout << array[i] << " ";
}
return 0;
}

0

Решение

#include <iostream>
#include <vector>

int main() {
// coefs before multiplying by powers of A
std::vector<int> a = {1,2,1};

// make polynomial coefs vector
int A = 1;
const int as = a.size();
int ap = 1;
for(int ai = 0; ai<as; ++ai){
a[ai] *= ap;
ap *= A;
}

std::vector<int> b = {1,3,3,1};
const int bs = b.size();

// result vector
std::vector<int> c(as + bs - 1, 0);

// multiply vectors
for(int ai = 0; ai<as; ++ai)
for(int bi = 0; bi<bs; ++bi){
c[ai+bi] += a[ai]*b[bi];
}

for(int cn: c)
std::cout << cn << ' ';
return 0;
}
1

Другие решения

Вы должны использовать выходной массив для этого и правильно умножить свои результаты.

Я считаю, что индекс = полиномиальный показатель (т.е. [0] для x**0):

std::vector<int> array(arr_size, 0);

std::cout << "Enter the array P(X): ";

for (int i = 0; i < arr_size; i++)
{
std::cin >> array[i];
}

for (int i = 0; i < arr_size; i++)
std::cout << array[i] << " ";
std::cout << std::endl;

std::vector<int> out(arr_size+2, 0); // We add two new coefficients

for (int i = 0; i < arr_size; i++) {
out[i+2] += array[i]; // bumps the coefficient for x**2
out[i+1] += array[i] * (2 * a); // add the coefficient for 2ax
out[i] += array[i] * (a * a); // Adds the coefficient for a**2

}
for(int coeff: out)
std::cout << coeff << " ";
std::cout << std::endl;
0

Мне кажется, проблема, которую вы можете решить с std::valarray

Я имею в виду … если ваш array является

std::valarray<int>  array(arr_size);

дальше вы можете просто написать

array *= x*x + 2*a*x + a*a;

Не по теме предложение: вы используете C ++ 11, поэтому, пожалуйста, избегайте прямого управления вашей динамической памятью.

В вашем коде вы разместили массив

int *array = new int[2 * arr_size];

но вы не удалили его.

Используйте, когда это возможно, стандартные контейнеры (std::valarray но также std::vector) и когда вам нужно управлять динамической памятью, используйте умный указатель (std::unique_ptr, std::shared_ptr, так далее.).

0
По вопросам рекламы [email protected]