FLYING

/* TODO: 気の利いた説明を書く */

逆ポーランドその1

#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桁の符号なし整数のみに対応した逆ポーランド記法による計算プログラム。これがもっともシンプルな形になると思われる。スタックという仕組みを利用することさえ分かれば、実装するのは結構あっけない。とりあえずは、色々な整数で計算が出来るように拡張していくつもり。