Pagini recente » Cod sursa (job #1752353) | Cod sursa (job #1252876) | Cod sursa (job #1239101) | Cod sursa (job #1035686) | Cod sursa (job #2306225)
#include <cstdio>
#include <stack>
#include <cstring>
using namespace std;
char s[100005];
stack<int>nre;
stack<char>semne;
void eliber(int i)
{
while(!semne.empty() && semne.top() != '(')
{
if(semne.top() == '+')
{
int x=nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(x+y);
semne.pop();
}
else if(semne.top() == '-')
{
int x=nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(y-x);
semne.pop();
}
else if(semne.top() == '*')
{
int x=nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(x*y);
semne.pop();
}
else if(semne.top() == '/')
{
int x=nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(y/x);
semne.pop();
}
}
}
void eliber_ori(int i)
{
while(!semne.empty() && semne.top() != '(')
{
if(semne.top() == '*')
{
int x=nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(x*y);
semne.pop();
}
else if(semne.top() == '/')
{
int x=nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(y/x);
semne.pop();
}
else break;
}
}
void formnr(int &i)
{
int nrrr=0;
while(s[i] >= '0' && s[i] <= '9')
{
nrrr=nrrr*10+(s[i]-'0');
i++;
}
nre.push(nrrr);
}
int main()
{
freopen("evaluare.in", "r", stdin);
freopen("evaluare.out", "w", stdout);
scanf("%s", s);
int n=0;
int ob = strlen(s);
for(int i=0; i<ob; i++)
{
if(s[i] >= '0' && s[i] <= '9')
{
formnr(i);
i--;
}
else if(s[i] == '(')
semne.push(s[i]);
else if(s[i] == '+' || s[i] == '-')
{
if(!semne.empty())
eliber(i);
semne.push(s[i]);
}
else if(s[i] == '*' || s[i] == '/')
{
eliber_ori(i);
semne.push(s[i]);
}
else if(s[i] == ')')
{
eliber(i);
semne.pop();
}
}
while(!semne.empty())
{
int nr=0;
if(semne.top() == '-')
{
int x = nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(y-x);
}
if(semne.top() == '*')
{
int x = nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(y*x);
}
if(semne.top() == '/')
{
int x = nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(y/x);
}
if(semne.top() == '+')
{
int x = nre.top();
nre.pop();
int y = nre.top();
nre.pop();
nre.push(y+x);
}
semne.pop();
}
printf("%d", nre.top());
return 0;
}