Mai intai trebuie sa te autentifici.
Cod sursa(job #2289986)
| Utilizator | Data | 25 noiembrie 2018 16:47:12 | |
|---|---|---|---|
| Problema | Evaluarea unei expresii | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.94 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c[100005];
const long long A=1000000005,PLUS=1000000006,MINUS=1000000007,ORI=1000000008,CAT=1000000009;
stack <long long> q;
int main()
{int i,nr=0;
char semn='+';
in.getline(c,100002);
q.push(A);
for (i=0;c[i];)
{
if (c[i]=='('){q.push(A);i++;}
else if (c[i]=='+'){q.push(PLUS);i++;}
else if (c[i]=='-'){q.push(MINUS);i++;}
else if(c[i]=='*'){q.push(ORI);i++;}
else if (c[i]=='/'){q.push(CAT);i++;}
else if (c[i]>='0'&&c[i]<='9')
{
nr=0;
while (c[i]>='0'&&c[i]<='9')
{
nr=nr*10+c[i]-'0';
i++;
}
if (q.top()==PLUS)
{q.pop();q.push(nr);}
else if (q.top()==MINUS)
{q.pop();q.push(-1*nr);}
else if (q.top()==ORI)
{q.pop();nr=q.top()*nr;q.pop();q.push(nr);}
else if(q.top()==CAT)
{q.pop();nr=q.top()/nr;q.pop();q.push(nr);}
else if (q.top()==A)
{q.push(nr);}
}
else if(c[i]==')')
{
nr=0;
while (!(q.top()==A))
{
nr+=q.top();
q.pop();
}
q.pop();
if (q.top()==PLUS)
{q.pop();q.push(nr);}
else if (q.top()==MINUS)
{q.pop();q.push(-1*nr);}
else if (q.top()==ORI)
{q.pop();nr=q.top()*nr;q.pop();q.push(nr);}
else if(q.top()==CAT)
{q.pop();nr=q.top()/nr;q.pop();q.push(nr);}
else if (q.top()==A)
{q.push(nr);}
i++;
}
}
nr=0;
while (!(q.top()==A))
{
nr+=q.top();
q.pop();
}
out<<nr<<"\n";
out.close();
in.close();
return 0;
}
