题意:
给一个表达式的格式(给的方式也是递归表示的。。。)只包含加减,单个数字,括号,求该表达式的值。
思路:
可以中缀转后缀再求值,但是有点麻烦。。而且还会加正负号,于是,直接选择了递归求解。。。
代码:
#include <iostream>
using namespace std;
string data;
int len;
int slove(int a, int b)
{
if (b == a) return data[a]-'0';
else if (data[a] == '+') return slove(a+1,b);
else if (data[a] == '-') return -slove(a+1,b);
else if (data[a] == '(')
{
int i = a+1, j = 1;
while (j > 0)
{
if (data[i] == '(') j ++;
else if (data[i] == ')') j --;
i ++;
}
if (i == b+1) return slove(a+1,b-1);
else if (data[i] == '+') return slove(a,i-1) + slove(i+1,b);
else return slove(a,i-1) - slove(i+1,b);
}
else if (data[b] == ')')
{
int i = b-1, j = 1;
while (j > 0)
{
if (data[i] == '(') j --;
else if (data[i] == ')') j ++;
i --;
}
if (i == a-1) return slove(a+1,b-1);
else if (data[i] == '+') return slove(a,i-1) + slove(i+1,b);
else return slove(a,i-1) - slove(i+1,b);
}
else
{
int i = b;
while (data[i] != '+' && data[i] != '-') i --;
if (data[i] == '+') return slove(a,i-1) + slove(i+1,b);
else return slove(a,i-1) - slove(i+1,b);
}
}
int main()
{
while (cin >> data)
{
len = data.length();
cout << slove(0, len-1) << endl;
}
}