Pagini recente » Cod sursa (job #110281) | Cod sursa (job #110288) | Cod sursa (job #248445) | Cod sursa (job #877706) | Cod sursa (job #872944)
Cod sursa(job #872944)
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int gr(char t)
{
if(t=='*'||t=='/')
return 1;
else
if(t=='+'||t=='-')
return 0;
return -1;
}
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;
}
int stack[200100],n,i,k,ts,t;
char s[200100],exp[200100],sts[200100];
int main ()
{
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
if(s[i]==')')
{
for(k=ts;sts[k]!='(';--k)
exp[++t]=sts[k];
ts=k-1;
}
else
{
if(gr(s[i])<=gr(sts[ts]))
{
exp[++t]=sts[ts];
sts[ts]=s[i];
}
else
sts[++ts]=s[i];
}
}
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;
}