小美的数学题(特殊表达式求值)

#include <iostream>

using namespace std;

/**
题目描述:
输入一个括号序列(())()。
单独成对的括号()则表示为整数2。
(())则表示(2),如果外层还有一个括号则将内部的数字加一,所以(2) 得到3。
如果两个标准括号相连,例如()(), 则表示2*2 = 4。

输入'(())()' --> (2+1)*2 = 6
输入 '(()())(())' -->(1+2*2)*(2+1) = 15
*/

// 计算一对括号(包含内部子表达式)的值
int cal(string &exp, int start, int &end) {
    int cur_end;
    int result = 1;
    start++;
    while(start < exp.size()) {
        // 右括号则表示当前括号对计算完毕,返回
        if (exp[start] == ')') {
            result += 1;
            start++;
            break;
        // 左括号则递归调用计算该括号对的值
        } else if(exp[start] == '(') {
            result *= cal(exp, start, start);
        }
    }
    end = start;
    return result;
}

int main() {
    string exp = "(()())()";

    while(getline(cin, exp)) {
        int start = 0;
        int result = 1;
        while(start < exp.size()) {
            result *= cal(exp, start, start);
        }
        cout << result << endl;
    }
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务