0

我输入一个数组,代码应该将此数组乘以(x^2 + 2*A*X + A^A). 例如一个数组1, 3, 3, 1应该有答案1, 5, 10, 10, 5, 1if 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;
}
4

3 回答 3

1
#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;
}
于 2018-11-24T15:38:12.937 回答
0

您应该为此使用输出数组并正确地将结果相乘。

我正在考虑 index = 多项式指数(即[0]for 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;
于 2018-11-24T14:37:58.127 回答
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等)。

于 2018-11-24T14:57:03.903 回答