#include<stdio.h> #include<iostream> #include<string> #include<algorithm> using namespace std; int lisp(string a, int i) { int sum = 0; int j; if (a[i] == '(') { sum=lisp(a, i + 1); } else if (a[i] == '+') { sum = a[i + 1] - '0'; for (j = i + 2; a[j] != ')'; j++) { if (a[j] == '(') { sum+=lisp(a, j + 1); while (a[j] != ')') { j++; } continue; } sum += a[j] - '0'; } } else if (a[i] == '-') { sum = a[i + 1] - '0'; for (j = i + 2; a[j] != ')'; j++) { if (a[j] == '(') { sum -= lisp(a, j + 1); while (a[j] != ')') { j++; } continue; } sum -= a[j] - '0'; } } else if (a[i] == '*') { sum = a[i + 1] - '0'; for (j = i + 2; a[j] != ')'; j++) { if (a[j] == '(') { sum *= lisp(a, j + 1); while (a[j] != ')') { j++; } continue; } sum *= a[j] - '0'; } } else { sum = a[i + 1] - '0'; for (j = i + 2; a[j] != ')'; j++) { if (a[j] == '(') { sum /= lisp(a, j + 1); while (a[j] != ')') { j++; } continue; } sum /= a[j] - '0'; } } return sum; } int main() { string a; getline(cin, a); while (1) { int k = a.find(" "); if (k != -1) { a.erase(k,1); } else { break; } } int sum = lisp(a, 0); printf("%d\n", sum); } |
Double click to view unformatted code.