Você está na página 1de 2

Program.

cs
namespace simplecompute
{
class Program
{
static void Main(string[] args)
{
String input = "(1*(2*(3*(4*5))))";
Stack<char> operate = new Stack<char>();
Stack<int> number = new Stack<int>();
int getNumber = 0;
int count=0;
foreach(char temp in input)
{
if (temp >= '0' && temp <= '9')
{
getNumber *= 10;
getNumber+= temp - '0';
}else
{
if (temp != '(' && temp != ')')
{
number.Push(getNumber);
getNumber = 0;
if (operate.Count != 0)
{
if (operate.Peek() != ('('))
{
char sign = operate.Pop();
int right = number.Pop();
int left = number.Pop();
getNumber = calculation(left, right, sign);
number.Push(getNumber);
getNumber = 0;
}
}
operate.Push(temp);
}
if (temp == '(' || temp == ')')
{

if (temp == '(')
{
operate.Push(temp);
}else
{
number.Push(getNumber);
char sign=operate.Pop();
int right = number.Pop();
Page 1
Program.cs
int left = number.Pop();
getNumber = calculation(left, right, sign);
operate.Pop();
}
}
}
if (count == input.Length - 1)
{
number.Push(getNumber);
if (number.Count == 2)
{
char sign = operate.Pop();
int right = number.Pop();
int left = number.Pop();
getNumber = calculation(left, right, sign);
number.Push(getNumber);
}
}
count++;
}

Console.WriteLine(number.Pop());

Console.ReadLine();

}
public static int calculation(int left, int right, char sign)
{
if (sign == '+')
{
return left + right;
}else if (sign == '-')
{
return left - right;
}else if (sign == '*')
{
return left * right;
}else
{
return left / right;
}
}

}
}

Page 2

Você também pode gostar