#include <stdio.h> #define STACK_SIZE 100 int stack[STACK_SIZE]; int stack_size = 0; int pop() { if (stack_size <= 0) return 0; return stack[--stack_size]; } int push(int a) { stack[stack_size++] = a; } int calc(char *s) { int a, b, type; while (*s) { switch(*s) { case ' ': break; case '+': a = pop(); b = pop(); push(b+a); break; case '-': a = pop(); b = pop(); push(b-a); break; case '*': a = pop(); b = pop(); push(b*a); break; case '/': a = pop(); b = pop(); if (a == 0) break; push(b/a); break; case '%': a = pop(); b = pop(); if (a == 0) break; push(b%a); break; default: push(*s - '0'); } s++; } return pop(); } int main() { char s[100]; printf("逆ポーランドで入力\n"); scanf("%[^\n]*s", s); printf("%s = %d\n", s, calc(s)); }
デリミタを使わない、1桁の符号なし整数のみに対応した逆ポーランド記法による計算プログラム。これがもっともシンプルな形になると思われる。スタックという仕組みを利用することさえ分かれば、実装するのは結構あっけない。とりあえずは、色々な整数で計算が出来るように拡張していくつもり。