这题难度简单??? 我靠,我真是怀疑人生了。
#include #include #include #include #include using namespace std; int pos=0; double calculate(string s){ int len = s.length(); char flag='+'; stackst; double num=0;
while(pos<len){
num=0;
if(s[pos]=='('||s[pos]=='['||s[pos]=='{')
{pos++;
num=calculate(s);
}
while(pos<len&&isdigit(s[pos]))
{
num=num*10+s[pos]-'0';
pos++;
}
switch(flag){
case '+':
{st.push(num);break;}
case '-':
{st.push(-1*num);break;}
case '*':
{num=(st.top())*num;
st.pop();
st.push(num);break;
}
case '/':
{
num=(st.top())/num;
st.pop();
st.push(num);
break;
}
};
if(s[pos]==')'||s[pos]==']'||s[pos]=='}')
{pos++; break;}
flag=s[pos];
pos++;
}
double res=0;
while(!st.empty()){
res+=st.top();
st.pop();
}
return res;
}
int main() { string s; cin>>s; cout<<calculate(s); /*ctor c ; for(char cc:s){ c.push_back(cc); } vector::iterator it=c.begin(); while(it!=c.end()) { it=find(c.begin(),c.end(),'('); */ return 0;
}