使用栈,当遇到加减乘除时,从栈顶取出一个数计算后圧入栈顶,如果有括号,则递归调用括号内的字符串,如果是数字,则取出该数字。
#include<iostream>
#include<stack>
using namespace std;
int calculate(string s,int& i)
{
int num=0;
char operation='+';
if(s[i]=='-') operation='-';
stack<int> stemp;
for(i;i<s.size()+1;i++)
{
if(s[i]>='0'&&s[i]<='9') num=num*10+(s[i]-'0');
if(s[i]=='(')
{
i++;
num=calculate(s,i);
i++;
}
if(s[i]==')') break;
else
{
int pre=0;
switch(operation)
{
case '+':stemp.push(num); break;
case '-':stemp.push(-num); break;
case '*':pre=stemp.top();
stemp.pop();
stemp.push(num*pre);
break;
case '/':pre=stemp.top();
stemp.pop();
stemp.push(pre/num);
break;
}
operation=s[i];
num=0;
}
}
int all=0;
while(!stemp.empty())
{
all+=stemp.top();
stemp.pop();
}
return all;
}
int main()
{
string s;
cin>>s;
int a=0;
cout<<calculate(s,a);
return 0;
}