题目:
思路:表达式是递归的一个定义。
代码:
#include <iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
int factor_value();//因子
int term_value();//项
int expression_value();//表达式
int main()
{
cout << expression_value() << endl;
return 0;
}
int expression_value()//求一个表达式的值
{
int result = term_value(); //求第一项的值
bool more = true;//假设有新的项
while (more)
{
char op = cin.peek();//看一个字符,不取走
if (op == '+' || op == '-')
{
cin.get();//从输入中读取一个字符
int value = term_value();//让value作为一个项
if (op == '+') result = result + value;
else result = result - value;
}
else more = false;//当没有新的项
}
return result;
}
int term_value()
{
int result = factor_value();
while (true)//**这个while就是一直在等下一个操作数**
{
char op = cin.peek();
if (op == '*' || op == '/')
{
cin.get();
int value = factor_value();
if (op == '*') result *= value;
else result /= value;
}
else
break;
}
return result;
}
int factor_value()//求一个因子的值
{
int result = 0;//此时定义为一个数
char c = cin.peek();
if (c == '(')//当有括号说明里面还有因子,此时c为一个表达式
{
cin.get();//读取括号
result = expression_value();
cin.get();//读取表达式
}
else {
while (isdigit(c))//当c是字符数字时
{
result = 10 * result + c - '0';//将字符转化为数字,先读取的数字为十进制中更高位
cin.get();
c = cin.peek();
}
}
return result;
}
样例:
参考北大网课