考虑这几种情况: 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;
}