题目来源:多项式输出

这道题在做的时候给自己挖了个坑,其实把符号、系数、指数分开来看会更好实现。

这里先给出不断调试给出的答案,思路不是一蹴而就的。


输入:
5
100 -1 1 -3 0 10
输出:
100x^5-x^4+x^3-3x^2+10


输入:
3
输出:
-50 0 0 1
-50x^3+1

首先看到示例。这样的示例是不够的,因为指数为1的时候x后面是不带“^”的,但是此处并未给出指数为1时的示例,因此可以自己给出一个综合性比较强的调试示例


输入:
5
0 -1 1 10 0 1 -1
输出:
-x^4+x^3+10x^2+1

开始our 工程!

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int cnt=n;
int a[10000];

首先进行输入的读取,存到n,由于这个n是题目给出的常量,最好不要动,所以我们用cnt来作为变量暂时存储n,以备不时之需。另外根据示例,我们需要输入n+1个指数,因此用数组来存储。

int i=0;
cnt++;
while(cnt--)
{
cin>>a[i];
i++;
}

此处使用了一个简单的while循环来输入存储数组,cnt充当计数君,不要忘记有n+1个数据所以要先cnt++

    cnt=n;
int meiyoufuhao=0;
for(i=0;i<=n;i++)
{
if(a[i]!=0)
{
meiyoufuhao=i;
break;
}
}

for(i=0;i<=n;i++)
{
if(a[i]!=0)
{
if(i==meiyoufuhao){
if(abs(a[i])!=1) cout<<a[i];
if(a[i]==-1) cout<<'-';
}
else if(a[i]>0)
{
cout<<'+';
if(abs(a[i])!=1||a[i]==1&&cnt==0) cout<<a[i];

}
else
{
if(abs(a[i])!=1) cout<<a[i];
if(a[i]==-1)
{
cout<<'-';
if(cnt==0) cout<<1;
}
}
}
if(a[i]!=0&&!cnt==0)
{
if(cnt==1)
{
cout<<'x';
}
else cout<<"x^"<<cnt;
}
cnt--;

}
return 0;
}

主要的实现都在这里了其中meiyoufuhao是没有符号的意思,记录第一个系数不为0的家伙的位置,让它不能带加号。其余的就按照基本的数学尝试实现了,一大堆的if语句,这里我因为前期思考不够,导致分类起来比较复杂。后续会再拿出一个版本上传。