Pagini recente » Cod sursa (job #924509) | Cod sursa (job #1890501) | Cod sursa (job #2745193) | Cod sursa (job #1400677) | Cod sursa (job #1977815)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int n,lungime,i,k,nrel,nr,stiva[100005];
char s[100005],fp[200005],st[100005];
int main()
{
fin.getline(s,100005);
lungime=strlen(s);
n=k=-1;
for (i=0; i<=lungime-1; i++)
if (s[i]>='0' && s[i]<='9')
{
fp[++n]=s[i];
if (s[i+1]<'0' or s[i+1]>'9') fp[++n]=',';
}
else if (s[i]=='(')
st[++k]=s[i];
else if (s[i]==')')
{
while (st[k]!='(') fp[++n]=st[k--];
k--;
}
else
if (s[i]=='+' or s[i]=='-')
{
char op=s[i];
while (st[k]=='+' or st[k]=='-' or st[k]=='*' or st[k]=='/')
fp[++n]=st[k--];
st[++k]=op;
}
else
if (s[i]=='*' or s[i]=='/')
{
char op=s[i];
while (st[k]=='*' or st[k]=='/')
fp[++n]=st[k--];
st[++k]=op;
}
while (k>=0)
fp[++n]=st[k--];
for (i=0; i<=n; i++)
if (fp[i]>='0' && fp[i]<='9') nr=nr*10+fp[i]-'0';
else if (fp[i]==',') { stiva[++nrel]=nr; nr=0;}
else if (fp[i]=='+') stiva[--nrel]=stiva[nrel]+stiva[nrel+1];
else if (fp[i]=='-') stiva[--nrel]=stiva[nrel]-stiva[nrel+1];
else if (fp[i]=='*') stiva[--nrel]=stiva[nrel]*stiva[nrel+1];
else if (fp[i]=='/') stiva[--nrel]=stiva[nrel]/stiva[nrel+1];
fout<<stiva[1]<<"\n";
return 0;
}