问题描述
常规的表达式求值,我们都会根据计算的优先级来计算。比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 *)。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少
输入描述
输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9.
保证表达式都是合法的,排列规则如样例所示。
输出描述
输出一个数,即表达式的值
输入例子
3+5*7
输出例子
56
分析
表达式只支持+ - *,没有括号,而且运算符没有优先级,只是按照从左到右的顺序运算。通过观察发现,表达式的正则表达式结构必然是(digit op digit)+,即数字和运算符是交替出现的。这样一来计算就变得很简单了。
note
有运算符优先级和括号的复杂表达式的求解,需要用到栈。会牵涉到编译理论的相关知识。
代码
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
string str;
getline(cin, str);
int ret = str[0] - '0';
for (int i = 1; i < str.size(); i += 2)
{
char c = str[i];
int val = str[i + 1] - '0';
switch (c)
{
case '+':
ret += val;
break;
case '-':
ret -= val;
break;
case '*':
ret *= val;
break;
}
}
printf("%d\n", ret);
return 0;
}