当前位置: 代码迷 >> 综合 >> 华为机试HJ50 四则运算
  详细解决方案

华为机试HJ50 四则运算

热度:47   发布时间:2024-02-21 07:15:38.0

华为机试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;
}