站外题,要求输出多个带加减乘除括号的中缀表达式的值。代码效率太低,求原因和优化建议。
程序大纲
//傻大个登场!
#include<bits/stdc++.h>
using namespace std;
long double shu[11];
int st,ft;
char fu[11];
string a;
int main(){
char s;
int T;cin>>T;
while(T--){
a="";
memset(shu,0,sizeof(shu));
cin>>a;
for(int i=0;i<a.length();i++){
if(a[i]<='9'&&a[i]>='0'){
int sou=0;
while(a[i]<='9'&&a[i]>='0')sou=sou*10+(a[i++]-'0');
i--;
shu[++st]=sou;
}
else if(a[i]=='(')fu[++ft]='(';
else if(a[i]==')'){//右括号
while(fu[ft]!='('){
if(fu[ft]=='+'){
ft--;st--;
shu[st]+=shu[st+1];
}
else if(fu[ft]=='-'){
ft--;st--;
shu[st]-=shu[st+1];
}
else if(fu[ft]=='*'){
ft--;st--;
shu[st]*=shu[st+1];
}
else if(fu[ft]=='/'){
ft--;st--;
shu[st]/=shu[st+1];
}
}
ft--;//删左括号
}
else{//运算符
if(fu[ft]=='*'){
ft--;st--;
shu[st]*=shu[st+1];
}
else if(fu[ft]=='/'){
ft--;st--;
shu[st]/=shu[st+1];
}
else{
if(a[i]=='+'||a[i]=='-'){
if(fu[ft]=='+'){
ft--;st--;
shu[st]+=shu[st+1];
}
else if(fu[ft]=='-'){
ft--;st--;
shu[st]-=shu[st+1];
}
}
}
fu[++ft]=a[i];
}
}
while(ft>0){
if(fu[ft]=='+'){
ft--;st--;
shu[st]+=shu[st+1];
}
else if(fu[ft]=='-'){
ft--;st--;
shu[st]-=shu[st+1];
}
else if(fu[ft]=='*'){
ft--;st--;
shu[st]*=shu[st+1];
}
else if(fu[ft]=='/'){
ft--;st--;
shu[st]/=shu[st+1];
}
}
cout<<(int)(shu[st])<<endl;
}
}