Pagini recente » Cod sursa (job #2931040) | Cod sursa (job #992948) | Cod sursa (job #2195092) | Cod sursa (job #1652644) | Cod sursa (job #2991272)
#include <bits/stdc++.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100005];
stack<int>nr;
stack<char>op;
void numere(int i)
{
if(nr.empty())
{
nr.push(s[i] - '0');
}else if(s[i-1] >= '0' && s[i-1] <='9')
{
int cop = nr.top();
nr.pop();
cop = cop * 10 + (s[i] - '0');
nr.push(cop);
}else{
nr.push(s[i] - '0');
}
}
void calcule(int nr1, int nr2)
{
if(op.top() == '*')
{
nr.push(nr1 * nr2);
}else if(op.top() == '/')
{
nr.push(nr2/nr1);
}else if(op.top() == '+')
{
nr.push(nr1+nr2);
}else{
nr.push(nr2-nr1);
}
}
int prior(char a)
{
if(a == '+' || a == '-')
{
return 1;
}
if(a == '*' || a == '/')
{
return 2;
}
return 0;
}
void semne(int i)
{
if(s[i] == ')')
{
while(op.top()!='(')
{
int nr1 =nr.top();
nr.pop();
int nr2 = nr.top();
nr.pop();
calcule(nr1,nr2);
op.pop();
}
op.pop();
}else{
if(s[i] == '(')
{
op.push(s[i]);
}else{
while(prior(s[i]) <= prior(op.top()))
{
int nr1 =nr.top();
nr.pop();
int nr2 = nr.top();
nr.pop();
calcule(nr1,nr2);
op.pop();
}
op.push(s[i]);
}
}
}
int main()
{
f.get(s,100001);
int lung = strlen(s);
s[lung] = ')';
s[lung+1] = NULL;
op.push('(');
for(int i=0;i<=lung;i++)
{
if(s[i] >= '0' && s[i] <='9')
{
numere(i);
}else{
semne(i);
}
}
g << nr.top();
return 0;
}