Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用向量执行长乘法_C++ - Fatal编程技术网

C++ 使用向量执行长乘法

C++ 使用向量执行长乘法,c++,C++,我正在写一个文件,它将接收多项式的两个系数列表,并将它们相乘,生成一个表示新的合成多项式的系数列表 我已经能够编写几乎所有的代码,除了我实际乘法的部分,因为我不确定如何在代码中进行长乘法。我所说的长乘法是指,在小学里,你会怎样做,你会把数字相乘,然后在最后把它们全部相加,除了系数项中的数字,每个系数都是向量中的一个条目 例如,如果一个向量是(4,0,0,0,0,0,80,3),而第二个是(0,7,0,0,4),则生成的向量将是(0,28,0,16,0,0,0560,21,0320,12) 我不知

我正在写一个文件,它将接收多项式的两个系数列表,并将它们相乘,生成一个表示新的合成多项式的系数列表

我已经能够编写几乎所有的代码,除了我实际乘法的部分,因为我不确定如何在代码中进行长乘法。我所说的长乘法是指,在小学里,你会怎样做,你会把数字相乘,然后在最后把它们全部相加,除了系数项中的数字,每个系数都是向量中的一个条目

例如,如果一个向量是(4,0,0,0,0,0,80,3),而第二个是(0,7,0,0,4),则生成的向量将是(0,28,0,16,0,0,0560,21,0320,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;
}
#包括
#包括
整数乘(std::vector in1,std::vector in2)
{
std::vector w3;//为结果多项式创建int类型的向量

对于(int a=0;a您必须完成自己的工作,然后提出问题,但您已经完成了一些工作,因此,让我们分析您迄今为止编写的代码:

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

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

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

$$(2x^2 + 3x - 1) (3x^2 + x + 4)$$
把答案写在纸上,并在你的循环中实现,你在那里的轨道是正确的

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

为什么使用int作为类型?难道你不想处理十进制系数的多项式,比如2.5x吗

您将如何将答案传递回调用方?也许您希望返回多项式而不是整数返回

为什么你要把这个例程命名为up\u乘法?这是否意味着有一个down\u乘法

此注释无效://为结果多项式创建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';
}
#包括
#包括
使用名称空间std;
向量乘法(常数向量和p1、常数向量和p2)
{
矢量结果;

对于(int a=0;a)在编写一行代码之前,你应该先在纸上计划好这一点。尝试编写代码,然后思考下一步要做什么并不是完成此任务的理想方式。无论如何,此任务实际上是在测试你是否能想出解决方案(先编写代码,然后编写代码)。如果有人真的给出答案,那真的会被认为是作弊。你已经基本建立了框架。你可能应该用一个大小初始化
w3
。你应该尝试解决这个问题。这不是一个其他人为你做功课的地方。你为什么要声明你的函数以返回n int然后返回0?这不是
main()
。除了前面说过的,为什么不从简单的开始,比如3次多项式乘以2(或1)二次多项式?如果这是可行的,那么它应该适用于任何一次多项式。你在代码中做这件事就像你用铅笔和纸做这件事一样。试着向一个不知道的(可能是想象中的)朋友解释长乘法。写下你的解释。它们是代码。你只需要把它翻译成你的编程语言。
int main() {
  vector<double> a = {1, 2, 3};
  vector<double> b = {4, -1, 2};
  vector<double> c = multiply(a,b);
  print(c);
}
  vector<double> c = a * b;