题目链接:多项式输出
对于这道题,看起来很简单,但是一直有一些小细节没有顾及,以至于改了很多次才AC。
1.全0的输出是0,我一开始忘记了这个点(虽然好像也没有考察到这个点)。
2.正数的输出要带“+”号,而负数会自带负号。
3.首项的输出要特殊处理,因为首项如果是整数的话不用带加号。(在阅读大佬代码的过程中,发现自己多想很多,题目中有说到如果第一项不是最高项,就不必要考虑加号不必输出的问题,仔细看题!!)
总之,我的方法还是太繁琐了,参考了评论区大佬的题解,贴上。
#include<iostream>
const int MAXN = 100+10;
using namespace std;
int main(void)
{
int cnt,n,flag=0,zero=0;
int num[MAXN];
cin>>cnt;
n=cnt;
cnt+=1;
for(int i=0;i<cnt;i++){
cin>>num[i];
if(num[i]) zero=1;
}
for(int i=0;i<cnt;i++,n--){
if(flag==0){//第一项 特殊处理
if(num[i]==0) continue;
else if(num[i]>0){
if(num[i]==1){
if(n==1) cout<<"x";
else if(n==0) cout<<num[i];
else cout<<"x^"<<n;
}
else{
if(n==1) cout<<num[i]<<"x";
else if(n==0) cout<<num[i];
else cout<<num[i]<<"x^"<<n;
}
}
else{
if(num[i]==-1){
if(n==1) cout<<"-x";
else if(n==0) cout<<-1;
else cout<<"-x^"<<n;
}
else{
if(n==1) cout<<num[i]<<"x";
else if(n==0) cout<<num[i];
else cout<<num[i]<<"x^"<<n;
}
}
flag=1;
continue;
}
if(num[i]==0) continue;
else if(num[i]>0){
if(num[i]==1){
if(n==1) cout<<"+x";
else if(n==0) cout<<"+1";
else cout<<"+x^"<<n;
}
else{
if(n==1) cout<<"+"<<num[i]<<"x";
else if(n==0) cout<<"+"<<num[i];
else cout<<"+"<<num[i]<<"x^"<<n;
}
continue;
}
else{
if(num[i]==-1){
if(n==1) cout<<"-x";
else if(n==0) cout<<"-1";
else cout<<"-x^"<<n;
}
else{
if(n==1) cout<<num[i]<<"x";
else if(n==0) cout<<num[i];
else cout<<num[i]<<"x^"<<n;
}
continue;
}
}
if(!zero) cout<<0;
return 0;
}
大佬代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a;
cin>>n;
for(int i=n;i>=0;i--){
cin>>a;
if(a){ //判0系数
if(i!=n&&a>0)cout<<"+"; //根据正负、是否为最高此项决定加号
if(abs(a)>1||i==0)cout<<a; // 输出系数(系数不为正负1或指数为0)
if(a==-1&&i)cout<<"-"; //-1系数特判,常数项已特判
if(i>1)cout<<"x^"<<i; // 二次及以上输出指数
if(i==1)cout<<"x"; // 一次项
}
}
}