模拟——多项式输出
模拟 · 例2-多项式输出
https://ac.nowcoder.com/acm/contest/20960/1002
虽然说模拟就是按照计算机的题目意思一步一步写,但是真实情况我会一直一边想一边写写到后面就会很乱,所有应该的思考路径是:
- 先整理题目里面的各种规则
- 把题目里面的各种规则拆分成小任务单独书写,而且每个规则下可能有特殊情况,在每个小任务下单独书写
把每一段功能分开写——多项式输出链接https://ac.nowcoder.com/acm/contest/20960/1002 我最开始的思路就是想到哪写到哪,从每一项往后面枚举,就会导致逻辑不清晰,书写混乱
```#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
signed main() {
int n;
cin>>n;
int m = n+1;
int cnt = n;
while(m--){
int num;
cin>>num;
if(num == 0){
cnt--;
}
else if(num > 0){
if(num == 1 && cnt != n){
cout<<"+"<<"x"<<"^"<<cnt;
cnt--;
}
if(cnt == 0) cout<<"+"<<num;
if(cnt == n){
if(num != 1){
cout<<num<<"x"<<"^"<<cnt;
}
else{
cout<<"x"<<"^"<<cnt;
cnt--;
}
}else{
cout<<"+"<<num<<"x"<<"^"<<cnt;
cnt--;
}
}else if(num < 0){
if(cnt == 0) cout<<"-"<<num;
if(num == -1){
cout<<"-"<<"x"<<"^"<<cnt;
cnt--;
}
else{
cout<<num<<"x"<<"^"<<cnt;
cnt--;
}
}
}
return 0;
}
但是正确不容易错的思路应该是把多项式的每一项拆成符号,数字,x和对应次方
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 110;
int a[N];
signed main() {
int n;
cin>>n;
for(int i = n;i>=0;i--){
cin>>a[i];
if(a[i] == 0) continue;
if(i == n){
if(a[i] < 0) cout<<"-";
else ;
}else{
if(a[i] > 0) cout<<"+";
else if(a[i] < 0) cout<<"-";
}//1.先考虑的符号部分
if((a[i] == 1 || a[i] == -1) && i != 0) ;
else cout<<fabs(a[i]);//2.再考虑数字部分
if(i == 0);
if(i == 1) cout<<"x";
else cout<<"x^"<<i;//3.最后是x和次方
}
return 0;
}
每一个部分里面都有一些特殊情况单独讨论