码题集OJ-多项式输入 (matiji.net) 这题我写的巨长,没过:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=110;
int a[N];
signed main()
{
int n;cin>>n;
for(int i=1;i<n+1;i++)cin>>a[i];
int t=n;
for(int i=1;i<=n+1;i++)
{
//cout<<"i: "<<i<<endl;
//cout<<"a[i]: "<<a[i]<<endl;
if(a[i]<0)
{
if(i==1)
{
if(a[i]==-1)
{
cout<<"x"<<"^"<<t;
t--;
}
else
{
cout<<a[i]<<"x"<<"^"<<t;
t--;
}
}
else if(i!=n+1)
{
if(a[i]==-1)
{
cout<<"-"<<"x"<<"^"<<t;
t--;
}
else
{
cout<<a[i]<<"x"<<"^"<<t;
t--;
}
}
else if(i==n+1)
{
cout<<"-"<<a[i];
}
}
else if(a[i]>0)
{
if(i==1)
{
if(a[i]==1)
{
cout<<"x"<<"^"<<t;
t--;
}
else
{
cout<<a[i]<<"x"<<"^"<<t;
t--;
}
}
else if(i!=n+1)
{
if(a[i]==1)
{
cout<<"+"<<"x"<<"^"<<t;
t--;
}
else
{
cout<<"+"<<a[i]<<"x"<<"^"<<t;
t--;
}
}
else if(i==n+1)
{
cout<<"a[i]: "<<a[i];
cout<<"+"<<a[i];
}
}
}
return 0;
}
其实我想的复杂了:
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],n,flag;
int main()
{
cin>>n;
for(int i=n;i>=0;i--)cin>>a[i];
for(int i=n;i>=0;i--)
{
if(a[i]==0)continue;
if(a[i]<0)cout<<"-";
else if(flag) cout<<"+"; //首位不输出符号
if(i==0 || abs(a[i])!=1) //指数为0时说明到了最后一个系数,不输出未知数x,直接输出常数
{
cout<<abs(a[i]);
}
if(i>1) cout<<"x"<<"^"<<i; //指数不为1才显式写
else if(i==1)cout<<"x"; //指数为1忽略
flag=1;
}
return 0;
}