Pagini recente » Cod sursa (job #848891) | Cod sursa (job #1440546) | Cod sursa (job #1040344) | Cod sursa (job #1591256) | Cod sursa (job #1826714)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout("evaluare.out");
char c[100010],a[100010],k;
int b[100010],vl[260];
int x,y,i,n,d;
bool ok;
bool nr()
{
if (c[i]>='0' && c[i]<='9') return 1;
return 0;
}
bool op()
{
if (k=='+' ||
k=='-' ||
k=='*' ||
k=='/' )
return 1;
return 0;
}
void tr()
{
int m;int n;
m=b[y-1]; n=b[y];
--y;
switch (a[x])
{
case '+' : { b[y]=m+n ; break; }
case '-' : { b[y]=m-n ; break; }
case '*' : { b[y]=m*n ; break; }
case '/' : { b[y]=m/n ; break; }
}
--x;
}
int main()
{
fin.getline (c+1,100010);
n=strlen(c+1);
//vl['(']=1;
vl['+']=vl['-']=2;
vl['*']=vl['/']=3;
c[0]='(';
c[n+1]=')';
for (i=0;i<=n+1;++i)
{
k=c[i];
if (nr())
{
d=k-'0';
++i;
while (nr())
{
d*=10;
d+=(c[i]-'0');
++i;
}
--i;
b[++y]=d;
}
else
if (op())
{
if (vl[c[i]] <= vl[a[x]])
{
tr();
--i;
}
else
{
a[++x]=c[i];
}
}
else
if (c[i]=='(')
{
a[++x]=c[i];
++i;
while (c[i]=='(')
{
a[++x]=c[i];
++i;
}
--i;
}
else
{
while (a[x]!='(')
{
tr();
}
--x;
}
}
fout << b[1];
return 0;
}