#include<iostream> #include<string> #include <algorithm> #include <iomanip> #include <vector> #include <cmath> #include<cstring> using namespace std; int lisp(string s, int pos) { int j; int sum = 0; if (s[pos] == '(') { sum = lisp(s, pos + 1); } else if (s[pos] == '+') { sum = (s[pos + 1] - '0'); for (int j = pos + 2;s[j] != ')';j++) { if (s[j] == '(') { sum += lisp(s, j + 1); while (s[j] != ')') { j++; } } else sum += (s[j] - '0'); } } else if (s[pos] == '-') { sum = (s[pos + 1] - '0'); for (int j = pos + 2;s[j] != ')';j++) { if (s[j] == '(') { sum -= lisp(s, j + 1); while (s[j] != ')') { j++; } } else sum -= (s[j] - '0'); } } else if (s[pos] == '*') { sum = (s[pos + 1] - '0'); for (int j = pos + 2;s[j] != ')';j++) { if (s[j] == '(') { sum *= lisp(s, j + 1); while (s[j] != ')') { j++; } } else sum *= (s[j] - '0'); } } else if (s[pos] == '/') { sum = (s[pos + 1] - '0'); for (int j = pos + 2;s[j] != ')';j++) { if (s[j] == '(') { sum /= lisp(s, j + 1); while (s[j] != ')') { j++; } } else sum /= (s[j] - '0'); } } return sum; } int main() { string s; getline(cin, s); for (int i = 0;i < s.size();i++) { if (s[i] == ' ') s.erase(i, 1); } int sum; sum = lisp(s, 0); cout << sum; } |
Double click to view unformatted code.