考虑这几种情况: 1.第一次出现非0的系数是什么时候?是正的还是负的?如何判断——这里定义了first来解决。 2.如何解决0,±1的时候的特殊情况? 3.如何将x^1变成x?这是一个特殊情况 4.讨论最后常数的情况
using namespace std;
int main()
{
int n;
cin >> n;
int *c = new int[n + 1];
for (int i = 0; i <= n; i++)
cin >> c[i];
int first = 0; // 第一个不为0的数出现了吗?
for (int i = 0; i < n; i++)
{
if (c[i] == 0) // 情况1——这个系数等于0
continue;
if (c[i] > 0) // 情况2——这个系数大于0
{
if (c[i] != 1)
{
if (!first) // 是第一个不等于0的系数吗?
{
if (n - i > 1)
cout << c[i] << "x^" << n - i;
else
cout << c[i] << 'x';
first = 1;
}
else if (n - i > 1)
cout << '+' << c[i] << "x^" << n - i;
else
cout << '+' << c[i] << 'x';
}
else
{
if (!first)
{
if (n - i > 1)
cout << "x^" << n - i;
else
cout << "x";
first = 1;
}
else
{
if (n - i > 1)
cout << "+x^" << n - i;
else
cout << "+x";
}
}
}
else // 情况3——这个系数小于0
{
first = 1;
if (c[i] != -1)
if (n - i > 1)
cout << c[i] << "x^" << n - i;
else
cout << c[i] << 'x';
else if (n - i > 1)
cout << "-x^" << n - i;
else
cout << "-x";
}
}
// 对最后一个常数项进行讨论
if (c[n] > 0)
cout << '+' << c[n];
if (c[n] < 0)
cout << c[n];
cout << endl;
return 0;
}