这题要用到栈,由于递归与栈的亲密关系所以可以用递归。参考了原题的标程。
#include <stdio.h> #include <string.h> char str[301]; int start; int max(int a, int b){ return a > b ? a : b; } int min(int a, int b){ return a < b ? a : b; } int val(){ int v, n; switch(str[start]){ case ‘m‘: start += 4; if(str[start - 2] == ‘n‘) return min(val(), val()); else return max(val(), val()); case ‘a‘: start += 4; return val() + val(); case ‘,‘: case ‘)‘: ++start; return val(); default: sscanf(str + start, "%d%n", &v, &n); start += n; return v; } } int main(){ int t; scanf("%d", &t); while(t--){ scanf("%s", str); start = 0; printf("%d\n", val()); } return 0; }
原文:http://blog.csdn.net/chang_mu/article/details/19483529