Pagini recente » Cod sursa (job #1056930) | Cod sursa (job #1897211) | Cod sursa (job #2967336) | Cod sursa (job #228463) | Cod sursa (job #872988)
Cod sursa(job #872988)
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
long long operatie(long x, long y, char c) {
switch ( c ) {
case '+': return x+y;
case '-': return x-y;
case '*': return x*y;
case '/': return x/y;
}
return 0;
}
long long stack[200100],n,i,k,ts,t,gp[200];
char s[200100],exp[200100],sts[200100];
int main ()
{
gp[')'] = 10;
gp['+'] = gp['-'] = 15;
gp['*'] = gp['/'] = 16;
gp['('] = 20;
s[0]='(';
f>>(s+1);
n=strlen(s);
s[n]=')';
for(i=0;i<=n;++i)
{
if(s[i]=='(')
sts[++ts]='(';
else
if(s[i]>='0'&&s[i]<='9')
{
while(s[i]>='0'&&s[i]<='9')
{
exp[++t]=s[i];
i++;
}
++t;
exp[t]=',';
i--;
}
else
{
for(k=ts;k&&sts[k]!='('&&gp[sts[ts]]>=gp[s[i]];--k)
exp[++t]=sts[k];
ts=k;
if(s[i]!=')')
{
sts[++ts]=s[i];
}
else
--ts;
}
}
for(i=1;i<=t;++i)
{
if(exp[i]>='0'&&exp[i]<='9')
{
++ts;
stack[ts]=0;
while(exp[i]>='0'&&exp[i]<='9')
{
stack[ts]=stack[ts]*10+exp[i]-48;
++i;
}
}
else
{
stack[ts-1]=operatie(stack[ts-1],stack[ts],exp[i]);
--ts;
}
}
g<<stack[1];
return 0;
}