Pagini recente » Cod sursa (job #687491) | Cod sursa (job #1071980) | Cod sursa (job #3167503) | Cod sursa (job #506229) | Cod sursa (job #2342704)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
long long op[100001],q[100001],n,i,nr,nr2,x;
char s[100001];
int grad(char c)
{
if(c=='+' or c=='-')
{
return 1;
}
if(c=='*' or c=='/')
{
return 2;
}
return 0;
}
void calculeaza(int a,int b)
{
if(op[b]=='+')
{
q[a-1]+=q[a];
}
if(op[b]=='-')
{
q[a-1]-=q[a];
}
if(op[b]=='*')
{
q[a-1]*=q[a];
}
if(op[b]=='/')
{
q[a-1]/=q[a];
}
return;
}
int main()
{
f.getline(s,100001);
n=strlen(s);
for(i=0; i<n; i++)
{
if(isdigit(s[i]))
{
x=0;
while(isdigit(s[i]))
{
x*=10;
x+=s[i]-'0';
i++;
}
i--;
q[++nr]=x;
}
else
{
if(nr2==0 || s[i]=='(' || grad(op[nr2])<grad(s[i]))
{
op[++nr2]=s[i];
}
else if(s[i]==')')
{
while(op[nr2]!='(')
{
calculeaza(nr,nr2);
nr--;
nr2--;
}
nr2--;
}
else
{
while(grad(s[i])<=grad(op[nr2]))
{
calculeaza(nr,nr2);
nr--;
nr2--;
}
op[++nr2]=s[i];
}
}
}
while(nr2)
{
calculeaza(nr,nr2);
nr--;
nr2--;
}
g<<q[1];
return 0;
}