0
点赞
收藏
分享

微信扫一扫

HJ50 四则运算

MaxWen 2022-05-01 阅读 77
c++算法

描述

输入一个表达式(用字符串表示),求这个表达式的值。

保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。

数据范围:表达式计算结果和过程中满足 |val| \le 1000 \∣val∣≤1000  ,字符串长度满足 1 \le n \le 1000 \1≤n≤1000 

输入描述:

输入一个算术表达式

输出描述:

得到计算结果

示例1

输入:

3+2*{1+2*[-4/(8-6)+7]}

复制输出:

25
#include <iostream>
#include <vector>

int fourArithmetic(std::string& str, int left, int right)
{
    char op = '+';
    std::vector<int> vec;
    int sum = 0;
    for(int i=left;i<=right;++i)
    {
        if(std::isdigit(str[i]))
        {
            sum = sum*10 + str[i] - '0';
        }
        if(str[i] == '{' || str[i] == '[' || str[i] == '(')     //开始找子式
        {
            int layer = 0;
            int j = i;
            while(j <= right)       //3+2*{1+2*[-4/(8-6)+7]}
            {
                if(str[j] == '{' || str[j] == '[' || str[j] == '(')
                {
                    layer++;
                }
                if(str[j] == '}' || str[j] == ']' || str[j] == ')')
                {
                    layer--;
                    if(0 == layer)
                    {
                        break;
                    }
                }
                j++;
            }
            sum = fourArithmetic(str, i+1, j-1);
            i = j+1;
        }

        if(!(std::isdigit(str[i])) || i == right)
        {
            switch (op)
            {
            case '+':
                vec.push_back(sum);
                op = str[i];
                break;
            case '-':
                vec.push_back(-sum);
                op = str[i];
                break;
            case '*':
                vec.back() *= sum;
                op = str[i];
                break;
            case '/':
                vec.back() /= sum;
                op = str[i];
                break;
            
            default:
                break;
            }
            sum = 0;
        }
        
    }
    int rtn = 0;
    for(int x : vec)
    {
        rtn += x;
    }
    return rtn;
}

int main()
{
    std::string str;
    getline(std::cin, str);
    std::cout << fourArithmetic(str, 0, str.length()-1) << std::endl;

    return 0;
}
举报

相关推荐

0 条评论