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; }