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<double> resultStack = new Stack<double>(); 

            List<string> 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(); //Забираем результат всех вычислений из стека и возвращаем его
        }

    }

}
