[luoguP1981] 表达式求值(U•ェ•*U)
弄两个栈,一个存数,一个存运算符,然后乱搞。
代码
#include <cstdio> #include <cstring> #include <iostream> #define N 1000001 int n, top_d, top_f; int stack_d[N]; char s[N], stack_f[N]; bool b[N]; int main() { int i, j, x; scanf("%s", s + 1); n = strlen(s + 1); i = 1; x = 0; while(isdigit(s[i])) { x = ((x << 1) + (x << 3) + s[i] - '0') % 10000; i++; } stack_d[++top_d] = x; stack_f[++top_f] = s[i]; i++; while(i <= n) { x = 0; while(isdigit(s[i])) { x = ((x << 1) + (x << 3) + s[i] - '0') % 10000; i++; } stack_d[++top_d] = x; if(stack_f[top_f] == '*') { stack_d[top_f] = (stack_d[top_f] * stack_d[top_f + 1]) % 10000; top_f--; top_d--; } stack_f[++top_f] = s[i]; i++; } for(i = 1; i <= top_d; i++) stack_d[i] = (stack_d[i] + stack_d[i - 1]) % 10000; printf("%d\n", stack_d[top_d]); return 0; }