Pagini recente » Cod sursa (job #3268048) | Cod sursa (job #806683) | Cod sursa (job #1726108) | Cod sursa (job #1384143) | Cod sursa (job #1993403)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char v[100002],fp[100002],op[100002];
int stiva[100002],nr,nrel,n,k;
int main()
{
fin.getline(v,100005);
int l=strlen(v);
n=k=0;
for (int i=0;i<l;i++)
{
if (v[i]>='0' && v[i]<=9)
{
fp[++n]=v[i];
if (v[i+1]<'0' || v[i+1]>'9') fp[++n]=',';
}
else if (v[i]=='(')
op[++k]=v[i];
else if(v[i]==')')
{
while (op[k]!='(')
fp[++n]=op[k--];
k--;
}
else if (v[i]=='+' || v[i]=='-')
{
char oper=v[i];
while (op[k]=='-' || op[k]=='+' || op[k]=='/' || op[k]=='*')
fp[++n]=op[k--];
op[++k]=oper;
}
else if(v[i]=='/' || v[i]=='*')
{
char oper=v[i];
while (op[k]=='*' || op[k]=='/')
fp[++n]=op[k--];
op[++k]=oper;
}
}
while (k) fp[++n]=op[k--];
for (int i=1;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;
}