//参考前辈 #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; int num, flag; switch(s[1]) { case '+':x = 0; for(int i = 3; s[i] != ')'; i++) { if(s[i] >= '0' && s[i] <= '9') { x += s[i]-48; if(s[i+1] >= '0' && s[i+1] <= '9') x *= 10; } else if(s[i] == '(') { x += lisp(s+i); while(s[i] != ')') i++; } } break; case '-':x = 0; first = 1; for(int i = 3; s[i] != ')'; i++) { if(s[i] >= '0' && s[i] <= '9') { x -= s[i]-48; if(s[i+1] >= '0' && s[i+1] <= '9') x *= 10; else if(s[i+1] == ' ' && first) { first = 0; x = -x; } } else if(s[i] == '(') { if(first) { x = lisp(s+i); first = 0; } else x -= lisp(s+i); while(s[i] != ')') i++; } } break; case '*':num = 0; x = 1; flag = 0; for(int i = 3; s[i] != ')'; i++) { if(s[i] >= '0' && s[i] <= '9') { num = num * 10 + s[i] - 48; if(s[i+1] == ' ' || s[i+1] == ')') flag = 1; if(flag) { x *= num; num = 0; flag = 0; } } else if(s[i] == '(') { x *= lisp(s+i); while(s[i] != ')') i++; } } break; case '/':first = 1; num = 0; flag = 0; for(int i = 3; s[i] != ')'; i++) { if(s[i] >= '0' && s[i] <= '9') { num = num * 10 + s[i] - 48; if(s[i+1] == ' ' || s[i+1] == ')') flag = 1; if(flag) { if(first) { x = num; first = 0; } else x /= num; num = 0; flag = 0; } } 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.