Cin-browser interpreter · runs locally
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h> #include <string.h> long values[64]; int vtop = 0; char ops[64]; int otop = 0; int prec(char c) { if (c == '+' || c == '-') return 1; if (c == '*' || c == '/') return 2; return 0; } int main() { string src; printf("Enter expression: "); scanf("%s", &src); long result = 0; for (int i = 0; src[i] != 0; i++) { char c = src[i]; if (c == ' ') continue; if (c >= '0' && c <= '9') { long v = 0; while (src[i] >= '0' && src[i] <= '9') { v = v * 10 + (src[i] - '0'); i++; } i--; values[vtop++] = v; } else if (c == '(') { ops[otop++] = c; } else if (c == ')') { while (otop > 0 && ops[otop - 1] != '(') { char op = ops[--otop]; long b = values[--vtop], a = values[--vtop]; values[vtop++] = op == '+' ? a + b : op == '-' ? a - b : op == '*' ? a * b : a / b; } otop--; } else if (c == '+' || c == '-' || c == '*' || c == '/') { while (otop > 0 && prec(ops[otop - 1]) >= prec(c)) { char op = ops[--otop]; long b = values[--vtop], a = values[--vtop]; values[vtop++] = op == '+' ? a + b : op == '-' ? a - b : op == '*' ? a * b : a / b; } ops[otop++] = c; } } while (otop > 0) { char op = ops[--otop]; long b = values[--vtop], a = values[--vtop]; values[vtop++] = op == '+' ? a + b : op == '-' ? a - b : op == '*' ? a * b : a / b; } printf("= %ld\n", values[0]); return 0; }
52 lines
Output
Write some code, then press Run. Stdout and errors appear here.