Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- int ch(char a)
- {
- if (a == '^')
- return 4;
- if (a == '*' || a == '/')
- return 3;
- if (a == '+' || a == '-')
- return 2;
- if (a == '(' || a == ')')
- return 1;
- return 0;
- }
- int nin(char a, char* b)
- {
- for (int i = 0; i < 7; i++)
- {
- if (a == b[i])
- return 0;
- }
- return 1;
- }
- int sr(char a, char b)
- {
- a = ch(a);
- b = ch(b);
- return a >= b;
- }
- int pr(char a, char b, char c)
- {
- if (c == '+')
- return (a + b);
- if (c == '-')
- return (a - b);
- if (c == '*')
- return (a * b);
- if (c == '/')
- return (a / b);
- return pow(a, b);
- }
- int main()
- {
- int n = 0, t = -1, k = -1;
- char* q = "()+-*/^";
- scanf("%d", &n);
- char* arr = (char*)malloc(n);
- char* stack = (char*)malloc(n);
- char* ans = (char*)malloc(n);
- scanf("%s", arr);
- for (int i = 0; i < n; i++)
- {
- if (nin(arr[i], q))
- {
- printf("%c ", arr[i]);
- k++;
- ans[k] = arr[i];
- }
- else if (t == -1)
- {
- t++;
- stack[t] = arr[i];
- }
- else
- {
- while (arr[i] != '(' && sr(stack[t], arr[i]) && t > 0)
- {
- if (stack[t] != '(')
- {
- k++;
- ans[k] = stack[t];
- printf("%c ", stack[t]);
- t--;
- }
- else
- {
- t--;
- break;
- }
- }
- if (arr[i] != ')')
- {
- t++;
- stack[t] = arr[i];
- }
- }
- }
- while (t != -1)
- {
- if (stack[t] != '(')
- {
- k++;
- ans[k] = stack[t];
- printf("%c ", stack[t]);
- t--;
- }
- }
- for (int i = 0; i <= k; i++)
- {
- if (nin(ans[i], q))
- {
- t++;
- stack[t] = ans[i] - 48;
- }
- else
- {
- t--;
- stack[t] = pr(stack[t], stack[t + 1], ans[i]);
- }
- }
- printf("\n%d\n", stack[t]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment