Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Linq;
- namespace _1._2._1._3_s_
- {
- class Program
- {
- static void Main()
- {
- Console.WriteLine(Compute(Transform("(((((2-3)+1)*3)+1)*9)")));
- }
- static string Transform(string str)
- {
- var postfix = string.Empty;
- var stack = new Stack<char>();
- foreach (var e in str)
- {
- if (char.IsDigit(e))
- postfix += e;
- else if (e == '(')
- stack.Push(e);
- else if (e == ')')
- {
- while (stack.Peek() != '(')
- {
- postfix += stack.Pop();
- }
- stack.Pop();
- }
- else if (IsOperation(e))
- {
- while (GetPriority(stack.Peek()) > e)
- {
- postfix += stack.Pop();
- }
- stack.Push(e);
- }
- }
- while (stack.Count != 0)
- {
- postfix += stack.Pop();
- }
- Console.WriteLine(postfix);
- return postfix;
- }
- static bool IsOperation(char ch) => ch == '+' || ch == '-' || ch == '/' || ch == '*';
- static int Compute(string str)
- {
- var stack = new Stack<int>();
- foreach (var e in str)
- {
- if (e <= '9' && e >= '0')
- {
- stack.Push(e - '0');
- continue;
- }
- switch (e)
- {
- case '+':
- stack.Push(stack.Pop() + stack.Pop());
- break;
- case '-':
- stack.Push(-stack.Pop() + stack.Pop());
- break;
- case '*':
- stack.Push(stack.Pop() * stack.Pop());
- break;
- case '/':
- stack.Push((1 / stack.Pop()) * stack.Pop());
- break;
- default:
- Console.WriteLine("wrong");
- throw new ArgumentException();
- }
- }
- return stack.Pop();
- }
- public static int GetPriority(char operation)
- {
- switch (operation)
- {
- case '+': return 1;
- case '-': return 1;
- case '*': return 2;
- case '/': return 2;
- }
- return -1;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement