>>106767248
Reverse polish notation, C:
#include <stdio.h>
#include <ctype.h>
int getn() {
for (int digits = 0, n = 0;;) {
const int c = getchar();
if (c <= 0) return digits ? n : -1;
if (isspace(c)) {
if (digits) return n;
continue;
}
const unsigned d = c - '0';
if (d > 9) return -c;
n *= 10, n += d, ++digits;
}
}
int main() {
#define SIZE 80
int stack[SIZE], i = 0;
for (;;) {
const int n = getn();
if (n >= 0) {
printf("%i ", n);
if (i >= SIZE) {
printf("Out of stack!\n");
continue;
}
stack[i++] = n;
} else if (n < -1) {
printf("%c ", -n);
if (i < 1) continue;
if (i == 1) switch (-n) {
case '-' :
stack[0] = -stack[0];
break;
case '=' :
printf("%i\n", stack[i - 1]);
break;
} else if (i > 1) switch (-n) {
case '+' :
--i, stack[i - 1] += stack[i];
break;
case '*' :
--i, stack[i - 1] *= stack[i];
break;
case '/' :
--i, stack[i - 1] /= stack[i];
break;
case '-' :
--i, stack[i - 1] -= stack[i];
break;
}
} else break;
}
}
https://godbolt.org/z/jqexaMP85