YZOI Easy Round 2_化简(simplify.c/cpp/pas)

Description

给定一个多项式,输出其化简后的结果。

Input

一个字符串,只含有关于字母x 的多项式,不含括号与分式,没有多余的空格。

Output

一个字符串,化简后的多项式,按照次数从大到小的顺序输出各项。

Input Sample

x^3+3*x^4-2*x^3+1-x

Output Sample

3*x^4-x^3-x+1

Hint

每项系数<10,次数<6,项数<20。字符串长度不超过100。

很烦的模拟   代码如下:

#include<iostream>

#include<cstdio>

using namespace std;

const int maxn=1000+10;

string s;

int a[maxn],lc=1,len;

bool first=true;

int main()

{

//	freopen("simplify.in","r",stdin);

//	freopen("simplify.out","w",stdout);

	cin>>s;

	len=s.size();

	if(len==1)

	{

		cout<<s[0];

		return 0;

	}

	for(int i=0;i<len;i++)

	{

		if(s[i]=='x')

		{

			if(i==3)

			{

				if(s[0]=='-')

				{

					if(s[4]=='^')

					{

						a[s[5]-'0']-=s[1]-'0';

					}

					else

					{

						a[1]-=s[1]-'0';

					}

					continue;

				}

			}

			if(s[0]>='0'&&s[0]<='9'&&i==2)

			{

				if(s[3]=='^')

				{

					a[s[4]-'0']+=s[0]-'0';

				}

				else

				{

					a[1]+=s[0]-'0';

				}

				continue;

			}

//			if(i==0)

//			{

//				a[1]++;

//				continue;

//			}

			if(s[i+1]=='^')

			{

				if(i==0)

				{

					a[s[i+2]-'0']++;

					continue;

				}

				if(s[i-1]=='*')

				{

					if(s[i-3]=='+')

						a[s[i+2]-'0']+=s[i-2]-'0';

					else if(s[i-3]=='-')

						a[s[i+2]-'0']-=(s[i-2]-'0');

				}

				else

				{

					if(i==0)

					{

						a[s[i+2]-'0']++;

						continue;

					}

						

					if(s[i-1]=='+'||s[i-1]=='-')

					{

						if(s[i-1]=='-')

							a[s[i+2]-'0']--;

						else

							a[s[i+2]-'0']++;

					}

					else

					{

						a[s[i+2]-'0']--;

					}

				}

			}

			else

			{

				if(s[i-1]=='+')

				{

					a[1]++;

				}

				else

				{

					a[1]--;

				}

			}

		}

		else

		{

			if(s[i]>='0'&&s[i]<='9')

			{

				if(s[i-1]=='^'||s[i+1]=='*')

					continue;

				a[0]+=s[i]-'0';

			}

		}

	}

	for(int i=0;i<len;i++)

	{

		if(s[i]=='^')

			lc=max(lc,s[i+1]-'0');

	}

	for(int i=lc;i>=0;i--)

	{

		if(a[i]==0)

			continue;

		if(i==0)

		{

			if(a[i]>0)

			{

				if(first)

				{

					cout<<a[i];

					first=false;

					continue;

				}

				cout<<'+'<<a[i];

			}

			else

			{

				cout<<'-'<<a[i];

			}

			continue;

		}

		if(i==1)

		{

			if(a[i]>0)

			{

				if(a[i]==1)

				{

					if(first)

					{

						cout<<"x";

						first=false;

						continue;

					}

					cout<<"+x";

				}

				else

				{

					if(first)

					{

						cout<<a[i]<<"*x";

						first=false;

						continue;

					}

					cout<<"+"<<a[i]<<"*x";

				}

			}

			else

			{

				if(a[i]==-1)

				{

					cout<<"-x";

				}

				else

				{

					cout<<a[i]<<"*x";

				}

			}

			continue;

		}

		if(a[i]>0)

		{

			if(a[i]==1)

			{

				if(first)

				{

					cout<<"x^"<<i;

					first=false;

					continue;

				}

				else

				{

					cout<<"+x^"<<i;

				}

				

			}

			else

			{

				if(first)

				{

					cout<<a[i]<<"*x^"<<i;

					first=false;

					continue;

				}

				else

				{

					cout<<"+"<<a[i]<<"*x^"<<i;

					cout<<9999999<<endl;

				}

			}

			

		}

		else

		{

			if(a[i]==-1)

			{

				cout<<"-x^"<<i;

			}

			else

			{

				cout<<a[i]<<"*x^"<<i;

			}

		}

	}

//	cout<<endl;

//	for(int i=8;i>=0;i--)

//		cout<<a[i]<<' ';

//	cout<<endl;

//	cout<<a[3]<<endl;

	return 0;

}

你可能感兴趣的:(round)