using Nito.Collections; using System.Linq.Expressions; using static System.Net.Mime.MediaTypeNames; namespace Calculator { public class CalculatorPolska { static private bool IsOperator(string с) { if (("+-/*^".Contains(с))) return true; return false; } public double Calculate(string input) { Stack resultStack = new Stack(); List inputList = input.Split(' ').ToList(); for (int i = inputList.Count-1; i >= 0; i--) //Для каждого символа в строке { if (double.TryParse(inputList[i], out double number)) { resultStack.Push(number); //Записываем в стек } else if (IsOperator(inputList[i])) { double a = resultStack.Pop(); if (!resultStack.TryPop(out double b)) b = a*2; switch (inputList[i]) { case "+": resultStack.Push(a + b); break; case "-": resultStack.Push(a - b); break; case "*": resultStack.Push(a * b); break; case "/": resultStack.Push(a / b); break; case "^": resultStack.Push(Math.Pow(a, b)); break; } } } return resultStack.Pop(); //Забираем результат всех вычислений из стека и возвращаем его } } }