標籤:
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‘]--;elsea[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;}
YZOI Easy Round 2_化簡(simplify.c/cpp/pas)