我正在编写一个文件,该文件将接收多项式的两个系数列表,并将它们相乘以生成表示新的结果多项式的单个系数列表。
我能够编写几乎所有的代码,除了我实际乘以它们的部分,因为我不确定如何在代码中进行长乘法。通过长乘法,我的意思是你如何在小学里做到这一点,你将乘以数字并将它们全部加在最后,除了数字系数术语,每个系数都是向量中的一个条目。
例如,如果一个向量是(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;
}
答案 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;
您需要做的就是将名称乘以运算符*