#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; }