用向量执行长乘法

时间:2018-04-03 03:02:34

标签: c++

我正在编写一个文件,该文件将接收多项式的两个系数列表,并将它们相乘以生成表示新的结果多项式的单个系数列表。

我能够编写几乎所有的代码,除了我实际乘以它们的部分,因为我不确定如何在代码中进行长乘法。通过长乘法,我的意思是你如何在小学里做到这一点,你将乘以数字并将它们全部加在最后,除了数字系数术语,每个系数都是向量中的一个条目。

例如,如果一个向量是(4,0,0,0,0,0,80,3)而第二个是(0,7,0,0,4),那么结果向量将是(0,28) ,0,16,0,0,0,560,21,0,320,12)

我对如何使这项工作感到茫然,我们将非常感谢任何帮助

#include <iostream>
#include <vector>

int up_multiply(std::vector<int> in1, std::vector<int> in2)
{
    std::vector<int> w3; // creates vector of type int for resultant polynomial

    for(int a=0; a<in2.size(); a++)
    {
        for(int b=0; b<in1.size(); b++)
        {
            // multiplication will go here
        }
    }

    for(int i=0; i<w3.size(); i++) // outputs w3
    {
        std::cout<< w3[i] << " ";
    }
    std::cout<< std::endl;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

你必须做自己的工作,然后提问,但你已经做了一些事情,所以让我们分析你到目前为止写的代码:

如一条评论中所述,没有理由返回整数状态代码。如果您认为此操作可能成功或失败,也许您会返回true或false,但我不明白为什么您会这么想。

其他建议是制定一个例子。答案是什么:

[抱歉,LateX在这里不起作用,我们如何发布方程?]

$$(2x^2 + 3x - 1) (3x^2 + x + 4)$$

在纸上找出答案并在循环中实施,你在那里正确的方向。

如果你要为一个大的多项式(比方说5000个术语)做这个,那么复制一个向量很慢。所以不要传入std :: vector,而应该通过引用传递:const std :: vector&amp;它只是传递给你在main中的列表,而不是复制。

为什么使用int作为类型?您不希望能够处理具有十进制系数的多项式,例如2.5x?

您如何将答案传回给来电者?也许你可能想要返回多项式而不是整数返回?

为什么要将此例程命名为up_multiply?这是否意味着存在down_multiply?

此注释无用://为结果多项式创建int类型的向量 你正在犯一个经典的初学者错误,为自己解释语言。 如果您调用变量answer或result而不是w3,则此注释将无用。

不要将变量命名为in1,in2和w3。这并没有描述它们是什么。即使像p1这样的短名称,p2表示它们是多项式并且反映了多项式的标准数学符号,结果或答案描述了返回的变量。

最后,不要打印出计算答案的函数内的东西。您可能想要计算多项式(快速)而不打印它(慢)。因此,写一个函数来计算多项式,另一个函数来打印它。

#include <iostream>
#include <vector>

using namespace std;
vector<double> multiply(const vector<double>& p1, const vector<double>& p2)
{
    vector<double> result;

    for(int a=0; a<in2.size(); a++)
    {
        for(int b=0; b<in1.size(); b++)
        {
            // multiplication will go here
        }
    }
    return result;
}

void print(const vector<double> p) {
  for(int i=0; i < p.size(); i++) {
    cout<< p[i] << " ";
  }
  cout<< '\n';
}

写一个main来测试你的代码:

int main() {
  vector<double> a = {1, 2, 3};
  vector<double> b = {4, -1, 2};
  vector<double> c = multiply(a,b);
  print(c);
}

看起来你是初学者,所以你可能不需要这样做,但要注意在C ++中你可以重载运算符。因此,您可以将其定义为运算符*

,而不是名称乘法
  vector<double> c = a * b;

您需要做的就是将名称乘以运算符*