华为机考题——HJ54 表达式求值

描述

给定一个字符串描述的算术表达式,计算出结果值。

输入字符串长度不超过 100 ,合法的字符包括 ”+, -, *, /, (, )” , ”0-9” 。

数据范围:运算过程中和最终结果均满足 |val| \le 2^{31}-1 \∣val∣≤231−1  ,即只进行整型运算,确保输入的表达式合法

输入描述:

输入算术表达式

输出描述:

计算出结果值

示例1

输入:

400+5

复制输出:

405
#include 
#include 
#include 
#include 
#include 
#include 
#include 
//2323*323/23+(23234-(40-3)*3)*434-23
int computer(std::string str, int left, int right)
{
    char option = '+';
    int sum = 0;
    std::vector sumVect;
    for(int i = left; i <= right; ++i)
    {
        if(std::isdigit(str[i]))
        {
            sum = sum * 10 + (str[i] - '0');
        }
        if(str[i] == '(')
        {
            int layer = 0;
            int tempi = i;
            while(tempi <= right)
            {
                if(str[tempi] == '(')
                {
                    layer++;
                }
                else if(str[tempi] == ')')
                {
                    layer--;
                    if(0 == layer)
                    {
                        break;
                    }
                }
                tempi++;
            }
            sum = computer(str, i + 1, tempi - 1);
            i = tempi + 1;
        }
        if(!(std::isdigit(str[i])) || i == right)
        {
            switch (option)
            {
            case '+':
                sumVect.push_back(sum);
                break;
            case '-':
                sumVect.push_back(-sum);
                break;
            case '*':
                sumVect.back() *= sum;
                break;
            case '/':
                sumVect.back() /= sum;
                break;
            
            default:
                break;
            }
            option = str[i];
            sum = 0;
        }
    }
    int rtn = 0;
    for(int e : sumVect)
    {
        rtn += e;
    }

    return rtn;
        
}


int main()
{
    std::string str;
    while(std::cin >> str)
    {
        int rtn = computer(str, 0, str.length()-1);
        std::cout << rtn << std::endl;
    }

    return 0;
}

你可能感兴趣的:(机试编程题,c++)