题目来源:多项式输出
这道题在做的时候给自己挖了个坑,其实把符号、系数、指数分开来看会更好实现。
这里先给出不断调试给出的答案,思路不是一蹴而就的。
一 输入: 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语句,这里我因为前期思考不够,导致分类起来比较复杂。后续会再拿出一个版本上传。