#include<stdio.h> int lisp(char *s); int main() { char s[1000]; int ans; gets(s); ans = lisp(s); printf("%d", ans); return 0; } int lisp(char *s) { int x, first; switch(s[1]) { case '+':x = 0; for(int i = 3; s[i] != ')'; i++) { if(s[i] >= '0' && s[i] <= '9') x += s[i]-48; else if(s[i] == '(') { x += lisp(s+i); while(s[i] != ')') i++; } } break; case '-':first = 1; for(int i = 3; s[i] != ')'; i++) { if(s[i] >= '0' && s[i] <= '9') if(first) { x = s[i]-48; first = 0; } else x -= s[i]-48; else if(s[i] == '(') { if(first) { x = lisp(s+i); first = 0; } else x -= lisp(s+i); while(s[i] != ')') i++; } } break; case '*':x = 1; for(int i = 3; s[i] != ')'; i++) { if(s[i] >= '0' && s[i] <= '9') x *= s[i]-48; else if(s[i] == '(') { x *= lisp(s+i); while(s[i] != ')') i++; } } break; case '/':for(int i = 3; s[i] != ')'; i++) { if(s[i] >= '0' && s[i] <= '9') if(first) { x = s[i]-48; first = 0; } else x /= s[i]-48; else if(s[i] == '(') { if(first) { x = lisp(s+i); first = 0; } else x /= lisp(s+i); while(s[i] != ')') i++; } } break; } return x; } |
Double click to view unformatted code.