Я ввожу массив и код должен умножить этот массив на (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;
}
#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;
}
Вы должны использовать выходной массив для этого и правильно умножить свои результаты.
Я считаю, что индекс = полиномиальный показатель (т.е. [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;
Мне кажется, проблема, которую вы можете решить с 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
, так далее.).