Pagini recente » Cod sursa (job #1488369) | Cod sursa (job #718929) | Cod sursa (job #584575) | Cod sursa (job #3909) | Cod sursa (job #2302847)
#include <iostream>
#include <stack>
#include <cstdio>
#include <string.h>
using namespace std;
stack<int> numere;
stack<char> sign;
char s[100005];
int i = 0, n;
int numar()
{
int nr = s[i]-'0';
i++;
while(s[i]>='0' && s[i]<='9')
{
nr*=10;
nr+=s[i]-'0';
i++;
}
i--;
return nr;
}
void parcurgere()
{
for(;i<n; i++)
{
if(s[i]>='0' && s[i]<='9')
numere.push(numar());
else if(s[i] == '(')
{
sign.push(s[i]);
}
else if(s[i] == '*' || s[i] == '/')
{
while(!sign.empty() && (sign.top() == '*' || sign.top() == '/'))
{
int a = numere.top();
numere.pop();
int b = numere.top();
numere.pop();
if(sign.top() == '*')
{
numere.push(a*b);
}
else
{
numere.push(b/a);
}
sign.pop();
}
sign.push(s[i]);
}
else if(s[i] == '+' || s[i] == '-')
{
while(!sign.empty() && (sign.top() == '*' || sign.top() == '/' || sign.top() == '+' || sign.top() == '-'))
{
int a = numere.top();
numere.pop();
int b = numere.top();
numere.pop();
if(sign.top() == '*')
{
numere.push(a*b);
}
else if(sign.top() == '/')
{
numere.push(b/a);
}
else if(sign.top() == '+')
{
numere.push(a+b);
}
else
{
numere.push(b-a);
}
sign.pop();
}
sign.push(s[i]);
}
else if(s[i] == ')')
{
while(sign.top() != '(')
{
int a = numere.top();
numere.pop();
int b = numere.top();
numere.pop();
if(sign.top() == '*')
{
numere.push(a*b);
}
else if(sign.top() == '/')
{
numere.push(b/a);
}
else if(sign.top() == '+')
{
numere.push(a+b);
}
else
{
numere.push(b-a);
}
sign.pop();
}
sign.pop();
}
}
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", s);
n = strlen(s);
parcurgere();
while(!sign.empty())
{
int x = numere.top();
numere.pop();
int y = numere.top();
numere.pop();
if(sign.top() == '*')
{
numere.push(x*y);
}
else if(sign.top() == '/')
{
numere.push(y/x);
}
else if(sign.top() == '+')
{
numere.push(x+y);
}
else
{
numere.push(y-x);
}
sign.pop();
}
printf("%d", numere.top());
return 0;
}