#include <stdio.h> #include <string.h> #include <ctype.h> int stack[100]; int stack_used; int debug = 1; int emptystack(){ if (stack_used == 0) return 1; return 0; } void initstack(){ stack_used = 0; } void push(int x){ stack[stack_used] = x; stack_used++; } int pop(){ if(emptystack()){ fprintf(stderr, "##### 繧ケ繧ソ繝�け縺檎ゥコ縺ォ縺ェ縺」縺ヲ縺�∪縺兔n"); return 0; } stack_used--; return stack[stack_used]; } int top(){ return stack[stack_used-1]; } void print_stack(){ int *s = stack; printf("繧ケ繧ソ繝�け縺ョ荳ュ霄ォ:"); while(s < &stack[stack_used]){ printf(" %d", *s); s++; } printf("\n"); } int main(int argc, char *argv[]){ int head, next; char *input; if(argc <= 1){ fprintf(stderr, "##### 繧ウ繝槭Φ繝峨Λ繧、繝ウ蠑墓焚縺ァ騾��繝シ繝ゥ繝ウ繝芽ィ俶ウ輔r蜈・蜉帙@縺ヲ縺上□縺輔>\n"); return 1; } input = argv[1]; for(head = 0; head < strlen(input); head = next+1){ next = head; while(input[next] != ' ' && input[next] != '\0')next++; if(isdigit(input[head])){ int num; sscanf(&input[head], "%d", &num); if(debug) printf("<- %d (謨ー蛟、)\n", num); push(num); } else{ int num1, num2, answer; switch(input[head]){ case '+': if(debug) printf("<- '+' (貍皮ョ怜ュ�)\n"); num1 = pop(); num2 = pop(); answer = num2 + num1; push(answer); break; case '-': if(debug) printf("<- '-' (貍皮ョ怜ュ�)\n"); num1 = pop(); num2 = pop(); answer = num2 - num1; push(answer); break; case '*': if(debug) printf("<- '*' (貍皮ョ怜ュ�)\n"); num1 = pop(); num2 = pop(); answer = num2 * num1; push(answer); break; case '/': if(debug) printf("<- '/' (貍皮ョ怜ュ�)\n"); num1 = pop(); num2 = pop(); answer = num2 / num1; push(answer); break; default: fprintf(stderr, "##### '%c' 縺ッ譛ェ遏・縺ョ貍皮ョ怜ュ舌〒縺兔n", input[head]); } } if(debug) print_stack(); } printf("遲斐∴ %d\n", top()); return 0; }