Pagini recente » Cod sursa (job #110283) | Cod sursa (job #749307) | Cod sursa (job #652187) | Statistici berceni luminita (lumi) | Cod sursa (job #873683)
Cod sursa(job #873683)
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char e[200000],s[200000],p[200000];
int v[200000],i,j=-1,k;
int pr(char x)
{
if (x=='('||x==')') return 0;
if (x=='-'||x=='+') return 1;
return 2;
}
void empty_stack (char x)
{
int y=pr(x);
if (!y)
{
do
{
p[++j]=s[k];
k--;
} while (y<pr(s[k]));
k--;
}
else
{
do
{
p[++j]=s[k];
k--;
} while (y<=pr(s[k]));
s[++k]=x;
}
}
void operate (char x)
{
int a;
switch (x)
{
case '+':a=v[j]+v[j-1];break;
case '-':a=v[j-1]-v[j];break;
case '*':a=v[j]*v[j-1];break;
case '/':a=v[j-1]/v[j];break;
}
v[--j]=a;
}
int main()
{
s[0]='(';
fin>>e;
int l=strlen(e);
for (i=0;i<l;i++)
{
if (e[i]>='0'&&e[i]<='9') {do {p[++j]=e[i];i++;} while(e[i]>='0'&&e[i]<='9');i--;p[++j]=' ';}
else if (e[i]=='('||pr(e[i])>pr(s[k])) s[++k]=e[i];
else empty_stack(e[i]);
}
empty_stack (')');
p[++j]='\0';
l=strlen(p);
int nr=0; j=0;
for (i=0;i<l;i++)
{
if (p[i]>='0'&&p[i]<='9') {nr=0; do {nr=nr*10+p[i]-48; i++;}while(p[i]!=' '); v[++j]=nr;}
else operate (p[i]);
}
fout<<v[1];
}