fork download
  1. #include <stdio.h>
  2.  
  3. #define SIZE 10
  4. double stack[SIZE];
  5. int sp;
  6.  
  7. void push(double value);
  8. double pop(void);
  9. int isFull(void);
  10. int isEmpty(void);
  11. void answer(void);
  12. void reset(void);
  13.  
  14. int main(void) {
  15. reset();
  16. while (1) {
  17. int mode;
  18. double a, b;
  19. scanf("%d", &mode);
  20. switch (mode) {
  21. case 1:
  22. b = pop();
  23. a = pop();
  24. push(a + b);
  25. break;
  26. case 2:
  27. b = pop();
  28. a = pop();
  29. push(a - b);
  30. break;
  31. case 3:
  32. b = pop();
  33. a = pop();
  34. push(a * b);
  35. break;
  36. case 4:
  37. b = pop();
  38. a = pop();
  39. push(a / b);
  40. break;
  41. case 5:
  42. scanf("%lf", &a);
  43. push(a);
  44. printf("data:%f\n", a);
  45. break;
  46. case 9:
  47. answer();
  48. return 0;
  49. default:
  50. break;
  51. }
  52. }
  53. return 0;
  54. }
  55.  
  56. void push(double value) {
  57. if (isFull()) return;
  58. stack[sp] = value;
  59. sp++;
  60. }
  61.  
  62. double pop(void) {
  63. if (isEmpty()) return 0;
  64. sp--;
  65. return stack[sp];
  66. }
  67.  
  68. int isFull(void) {
  69. return sp >= SIZE;
  70. }
  71.  
  72. int isEmpty(void) {
  73. return sp <= 0;
  74. }
  75.  
  76. void answer(void) {
  77. if (!isEmpty()) {
  78. printf("answer:%f\n", stack[sp - 1]);
  79. }
  80. }
  81.  
  82. void reset(void) {
  83. sp = 0;
  84. }
Success #stdin #stdout 0s 5328KB
stdin
5
8
5
2
1
5
2
5
3
1
4
9
stdout
data:8.000000
data:2.000000
data:2.000000
data:3.000000
answer:2.000000