Problem Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Example Input
59*684/-3*+#
Example Output
57
#include <stdio.h> #include <stdlib.h> #include <string.h> #define stackmax 10000 #define stacknum 10000 typedef int element; typedef struct { element *base; element *top; int stacksize; }sqstack; int initstack(sqstack &S) { S.base = (element *)malloc(stackmax *sizeof(element)); if(!S.base) exit(0); S.top = S.base; S.stacksize = stackmax; return 0; } void push(sqstack &S, int e) { if(S.top - S.base > S.stacksize) { S.base = (element *)realloc(S.base,(S.stacksize + stacknum) *sizeof(element)); S.top = S.base + S.stacksize; S.stacksize += stacknum; } *S.top = e; S.top++; } int pop(sqstack &S,int e) { if(S.base != S.top) { e = *(S.top-1); S.top--; } else { return 0; } return e; } int main() { sqstack S; initstack(S); int e1, e2; char c; while(~scanf("%c", &c)) { if(c == '#') { break; } if(c >= '0' && c <= '9') { push(S, c - '0'); } else { if(c == '+') { e1 = pop(S, e1); e2 = pop(S, e2); push(S, e1+e2); } else if(c == '-') { e1 = pop(S, e1); e2 = pop(S, e2); push(S, e2-e1); } else if(c == '*') { e1 = pop(S, e1); e2 = pop(S, e2); push(S, e2*e1); } else if(c == '/') { e1 = pop(S, e1); e2 = pop(S, e2); push(S, e2/e1); } } } printf("%d\n", *(S.top-1)); return 0; }