#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老哥的代码上改的,那几处实在别扭。