简单模拟,写的有点乱

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
#include <unordered_map>
#define ms(a,b) memset((a),(b),sizeof(a))

using namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pair<int, int> PII;

const int mod = 1e9 + 7;

const int P = 131;

const int N = 1010;

const int inf = 0x3f3f3f3f;

const ll lnf = 9e18;

int f( char a ) {
	if( a >= 'a' && a <= 'z' ) return 1;
	else if( a >= 'A' && a <= 'Z' ) return 2;
	else if( a >= '0' && a <= '9' ) return 3;
	else if( a == ' ' ) return 4;
	else return 5;
}

int main() {
	int n;
	int a;
	cin >> n;

	int flag = 0;

	for( int i = n; i >= 0; i-- ) {
		cin >> a;

		if( !i && a ) {
			if( a >= 0 && flag == 0 ) printf( "%d", a );
			else if( a >= 0 ) printf( "+%d\n", a );
			else printf( "%d\n", a );
		}
		else if( i == 1 && a ) {
			if( a == 1 || a == -1 ) {
				if( a >= 0 && flag == 0 ) printf( "x", a );
				else if( a >= 0 )printf( "+x", a );
				else printf( "-x", a );
			}
			else if( a >= 0 && flag == 0 ) printf( "%dx", a );
			else if( a >= 0 ) printf( "+%dx", a );
			else printf( "%dx", a );
		}
		else if( a && flag == 0 ) {
			if( a == 1 || a == -1 ) {
				if( a >= 0 )printf( "x^%d", i );
				else printf( "-x^%d", i );
			}
			else printf( "%dx^%d", a, i );
		}
		else if( a ) {
			if( a == 1 || a == -1 ) {
				if( a >= 0 )printf( "+x^%d", i );
				else printf( "-x^%d", i );
			}
			else if( a >= 0 )printf( "+%dx^%d", a, i );
			else printf( "%dx^%d", a, i );
		}

		if( a ) flag = 1;
	}

	return 0;
}