110,534
社区成员
发帖
与我相关
我的任务
分享
var s = "1+3*5";
var d = Regex.Matches(s, @"\d+").Cast<Match>().Select(x => Convert.ToInt32(x.Value)).ToList();
var f = Regex.Matches(s, @"\D+").Cast<Match>().Select(x => x.Value.Trim()).ToList();
foreach (var x in f)
{
if (x == "+") d[1] = d[0] + d[1];
if (x == "*") d[1] = d[0] * d[1];
d.RemoveAt(0);
}
Console.WriteLine(d[0]);
public class 计算器: Stack<int>
{
public void Plus(int x)
{
this.Push(this.Pop() + x);
}
public void Times(int x)
{
this.Push(this.Pop() * x);
}
public int Result()
{
return this.Peek();
}
}
这里,每当调用“+x、*x”的时候,就是先从栈中pop出数据,然后再把相应的四则计算结果压入栈。
那么你调用 var input = new 计算器();
input.Push(1);
input.Plus(3);
input.Times(5);
var result = input.Result();
结果就是20。