华为机试HJ50 四则运算
题目描述
请实现如下接口
/* 功能:四则运算
* 输入:strExpression:字符串格式的算术表达式,如: “3+2*{1+2*[-4/(8-6)+7]}”
* 返回:算术表达式的计算结果
/
public static int calculate(String strExpression)
{
/ 请实现*/
return 0;
}
输入描述:
输入一个算术表达式
输出描述:
得到计算结果
示例1
输入
3+2*{1+2*[-4/(8-6)+7]}
输出
25
#include <iostream>
#include <cstring>
#include <cstdlib>
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(); //求第一项的值while (1) {
char op = cin.peek(); //看一个字符,不取走if (op == '+' || op == '-') {
cin.get(); //从输入中取走一个字符int value = term_value();if (op == '+') result += value;else result -= value;}elsebreak;}return result;
}int term_value() //求一个项的值
{
int result = factor_value(); //求第一个因子的值while (1) {
char op = cin.peek();if (op == '*' || op == '/') {
cin.get();int value = factor_value();if (op == '*')result *= value;else result /= value;}elsebreak;}return result;
}int factor_value() //求一个因子的值
{
int result = 0;char c = cin.peek();if (c == '('|| c == '[' || c == '{') {
cin.get();result = expression_value();cin.get();}else {
while (isdigit(c)) {
result = 10 * result + c - '0';cin.get();c = cin.peek();}}return result;
}