gpt4 book ai didi

c++ - 添加两个多项式并正确显示结果

转载 作者:太空狗 更新时间:2023-10-29 21:11:26 25 4
gpt4 key购买 nike

我的代码相当简单:

    #include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
#include <numeric>
#include <cmath>

using namespace std;

int main() {

int sizeOfPoly1;
cout<<"Size of first polynomial: ";
cin>>sizeOfPoly1;
vector<int> poly1(sizeOfPoly1);
cout<<"constant =";
cin>>poly1[0];
for (int i = 1; i <= (sizeOfPoly1-1); ++i)
{
cout<<"Insert x^"<<i<<": ";
cin>>poly1[i];
}

int sizeOfPoly2;
cout<<"Size of second polynomial: ";
cin>>sizeOfPoly2;
vector<int> poly2(sizeOfPoly2);
cout<<"constant =";
cin>>poly2[0];
for (int i = 1; i <= (sizeOfPoly2-1); ++i)
{
cout<<"Insert x^"<<i<<": ";
cin>>poly2[i];
}


int sizeOfResult;

//verifies which polynomial has more elements and makes the result the size of the biggest one
if (poly1.size() >= poly2.size()) sizeOfResult = poly1.size();
else sizeOfResult = poly2.size();
vector<int> result(sizeOfResult);


for(int i = 0; i<sizeOfResult; ++i) { result[i] = poly1[i] + poly2[i]; }
cout<<"Sum of the two polynomials: ";

for(int i = 0; i<sizeOfResult; ++i)
{
switch(i){
case 0: cout<<result[i]<<" "; break;
case 1: cout<<result[i]<<"x"<<" "; break;
default: cout<<result[i]<<"x^"<<i<<" "; break;
}

}


return 0;
}

我想要做的是让用户输入他们的多项式大小,然后为它们输入常数 x^1、x^2 等等,然后返回两个多项式的和。此代码当前生成一些奇怪的东西,例如:两个多项式的总和:2 4x 6x^2 8x^3 1772060652x^4当一个多项式 vector 的元素多于另一个时,如何防止发生此输出错误?

最佳答案

只需让它们大小相同并使用 std::transform :

const auto sizeOfResult = std::max( poly1.size(), poly2.size() );
poly1.resize( sizeOfResult );
poly2.resize( sizeOfResult );

vector<int> result(sizeOfResult);
std::transform( poly1.begin(), poly1.end(), poly2.begin(), result.begin(),
[]( int a, int b ) { return a+b; } );

这是一个简单的解决方案,但开销很小。更高效的解决方案:

auto p = poly1.size() < poly2.size() ? std::tie( poly1, poly2 ) : std::tie( poly2, poly1 );
std::vector<int> result( std::get<1>( p ) );
for( size_t i = 0; i != std::get<0>( p ).size(); ++i )
result[i] += std::get<0>( p )[i];

live example

关于c++ - 添加两个多项式并正确显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50645314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com