#include<iostream>
#include<stack>
using namespace std;
int pos;
int result(const string& data)
{
int num=0;
char flag = '+';
stack<int> stk;
int len = data.length();
while(pos<len)
{
if(data[pos] == '(')
{
pos++;
num = result(data);
}
while(pos<len && isdigit(data[pos]))
{
num =num*10+ data[pos] - '0';
pos ++;
}
switch(flag)
{
case '+':
{
stk.push(num);
break;
}
case '-':
{
stk.push(-num);
break;
}
case '*':
{
stk.top() *= num;
break;
}
case '/':
{
stk.top() /= num;
break;
}
}
num = 0;
flag = data[pos];
if(data[pos] == ')')
{
++pos;
break;
}
++pos;
}
int sum = 0;
while(!stk.empty())
{
sum += stk.top();
stk.pop();
}
return sum;
}
int main()
{
string str;
cin>>str;
pos = 0;
cout<<result(str);
return 0;
}
在wzq_hwx老哥的代码上改的,那几处实在别扭。