题目描述
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
输入
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
输入样例1
1+2*10-10/2=
输出样例1
10
思路分析
应该不止我一个人没看到四种运算符的优先级相同这句话吧……我艰辛的写完正常版本才发现不太对劲T_T
这句话意味着,它只是单纯的从左到右算。
好了,我觉得难点在于把数分离出来,我采用的是递归的方法算出每一个单独的数:只要下一个是数字,我就继续算下去,直到找到不是数字的字符。
AC代码
代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
int value(int&i, string&formula, int element) {
element = element * 10 + formula[i++] - '0';
if (isdigit(formula[i])) {
return value(i, formula, element);
} else {
i--;
return element;
}
}
int main() {
int result = 0;
string formula;
cin >> formula;
for (int i = 0; i < formula.size() - 1; i++) {
if (formula[i] == '+' || formula[i] == '-' || formula[i] == '*' || formula[i] == '/' && formula[i + 1] != '0' || isdigit(formula[i]))
continue;
else {
cout << "ERROR";
return 0;
}
}
for (int i = 0; i < formula.size() - 1; i++) {
if (isdigit(formula[i])) {
result += value(i, formula, 0);
} else if (formula[i] == '-' && isdigit(formula[++i])) {
result -= value(i, formula, 0);
} else if (formula[i] == '*' && isdigit(formula[++i])) {
result *= value(i, formula, 0);
} else if (formula[i] == '/' && isdigit(formula[++i])) {
result /= value(i, formula, 0);
}
}
cout << result;
}