/// <summary>
/// 计算后缀表达式
/// </summary>
/// <param name="expression">后缀表达式</param>
/// <returns></returns>
public static double CalSu(String expression)
{
string[] units = expression.Trim().Split(' ');
Stack arguments = new Stack();
foreach (string unit in units)
{
if (isNumberic(unit))
{
arguments.Push(double.Parse(unit));
}
else
{
double value = (double)arguments.Pop();
switch (unit)
{
case "+":
arguments.Push((double)arguments.Pop() + value);
break;
case "-":
arguments.Push((double)arguments.Pop() - value);
break;
case "*":
arguments.Push((double)arguments.Pop() * value);
break;
case "/":
arguments.Push((double)arguments.Pop() / value);
break;
case "sin":
arguments.Push(Math.Sin(value));
break;
case "cos":
arguments.Push(Math.Cos(value));
break;
case "ln":
arguments.Push(Math.Log(value));
break;
case "exp":
arguments.Push(Math.Exp(value));
break;
case "sqrt":
arguments.Push(Math.Sqrt(value));
break;
default:
throw new ArgumentException("未知的符号" + unit);
}
}
}
if (arguments.Count != 1)
{
throw new ArgumentException("表达式不合法");
}
return (double)arguments.Pop();
}
【代码笔记】【c#】计算后缀表达式
最新推荐文章于 2022-08-02 15:50:40 发布