Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,100 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Globalization;
|
||||
using System.Threading;
|
||||
|
||||
namespace RPNEvaluator
|
||||
{
|
||||
class RPNEvaluator
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
|
||||
|
||||
string rpn = "3 4 2 * 1 5 - 2 3 ^ ^ / +";
|
||||
Console.WriteLine("{0}\n", rpn);
|
||||
|
||||
decimal result = CalculateRPN(rpn);
|
||||
Console.WriteLine("\nResult is {0}", result);
|
||||
}
|
||||
|
||||
static decimal CalculateRPN(string rpn)
|
||||
{
|
||||
string[] rpnTokens = rpn.Split(' ');
|
||||
Stack<decimal> stack = new Stack<decimal>();
|
||||
decimal number = decimal.Zero;
|
||||
|
||||
foreach (string token in rpnTokens)
|
||||
{
|
||||
if (decimal.TryParse(token, out number))
|
||||
{
|
||||
stack.Push(number);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (token)
|
||||
{
|
||||
case "^":
|
||||
case "pow":
|
||||
{
|
||||
number = stack.Pop();
|
||||
stack.Push((decimal)Math.Pow((double)stack.Pop(), (double)number));
|
||||
break;
|
||||
}
|
||||
case "ln":
|
||||
{
|
||||
stack.Push((decimal)Math.Log((double)stack.Pop(), Math.E));
|
||||
break;
|
||||
}
|
||||
case "sqrt":
|
||||
{
|
||||
stack.Push((decimal)Math.Sqrt((double)stack.Pop()));
|
||||
break;
|
||||
}
|
||||
case "*":
|
||||
{
|
||||
stack.Push(stack.Pop() * stack.Pop());
|
||||
break;
|
||||
}
|
||||
case "/":
|
||||
{
|
||||
number = stack.Pop();
|
||||
stack.Push(stack.Pop() / number);
|
||||
break;
|
||||
}
|
||||
case "+":
|
||||
{
|
||||
stack.Push(stack.Pop() + stack.Pop());
|
||||
break;
|
||||
}
|
||||
case "-":
|
||||
{
|
||||
number = stack.Pop();
|
||||
stack.Push(stack.Pop() - number);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
Console.WriteLine("Error in CalculateRPN(string) Method!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
PrintState(stack);
|
||||
}
|
||||
|
||||
return stack.Pop();
|
||||
}
|
||||
|
||||
static void PrintState(Stack<decimal> stack)
|
||||
{
|
||||
decimal[] arr = stack.ToArray();
|
||||
|
||||
for (int i = arr.Length - 1; i >= 0; i--)
|
||||
{
|
||||
Console.Write("{0,-8:F3}", arr[i]);
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue